91精产品自偷自偷综合官网版下载-91精产品自偷自偷综合下-91精品-91精品91久久久-91精品成人-91精品成人www

網(wǎng)站建設(shè)資訊

NEWS

網(wǎng)站建設(shè)資訊

動(dòng)態(tài)SQL的拼接技巧有哪些

這篇文章給大家介紹動(dòng)態(tài)SQL的拼接技巧有哪些,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的順河網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

常見的誤解有: 

1. 只用 ado.net ,無(wú)法進(jìn)行動(dòng)態(tài) SQL 拼接。 

2. 有幾個(gè)動(dòng)態(tài)參數(shù),代碼的重復(fù)量就成了這些參數(shù)的不同數(shù)量的組合數(shù),動(dòng)態(tài)參數(shù)越多,重復(fù)量越大。 

對(duì)于第二個(gè)問(wèn)題,以下的錯(cuò)誤代碼為其證據(jù):

代碼如下: 

 if(id>0 && string.IsNullOrEmpty(name)) {

 command.CommandText = "select * from t1 where id=?"; 

command.Parameters.Add(id);

 }

 if(id<=0 && !string.IsNullOrEmpty(name)) {

 command.CommandText = "select * from t1 where name=?"; 

command.Parameters.Add(name); 

if(id<=0 && !string.IsNullOrEmpty(name)) {

 command.CommandText = "select * from t1 where id=? and name=?";

 command.Parameters.Add(id); command.Parameters.Add(name); 

}

這兩個(gè)問(wèn)題都很好解決,給一個(gè)正確的代碼例子大家看看即可:

 代碼如下: 

 string sql ="select * from t1 where 1=1"; 

if(id != null) { sql += " and id=?"; 

addParameterValue(cmd,id); } 

if(!string.IsNullOrEmpty(name)) { sql += " and name=?";

 addParameterValue(cmd,name); } 

command.CommandText = sql;

這里的技巧在于,使用了一個(gè) "where 1=1", 巧妙解決了后續(xù) sql 拼接中,每行開頭是否要有 "and" 的問(wèn)題。而這個(gè) "where 1=1",并不會(huì)對(duì)數(shù)據(jù)庫(kù)的索引執(zhí)行,造成性能上的影響。 對(duì)參數(shù)進(jìn)行排列組合,然后寫各種組合的 SQL,這個(gè)思路很奇怪。問(wèn)題是,很多初學(xué)者,都有這個(gè)思維習(xí)慣。本人不是計(jì)算機(jī)科班出身,不知道是否哪本教科書,就是如此教導(dǎo)的。但很不幸的是,這個(gè)思維習(xí)慣是錯(cuò)誤的。 "where 1=1" 雖是教科書中沒(méi)有的小技巧,卻很管用。 另外,在程序中,一般會(huì)在用戶界面上讓使用用戶錄入數(shù)字,這個(gè)數(shù)字的數(shù)值,在代碼中會(huì)自動(dòng)變成 string,然后嘗試 string 轉(zhuǎn)換成 int/long,最后送到 sql 函數(shù)里。這里需要特別注意的是,很多人把某個(gè)特殊的數(shù)值,作為“用戶無(wú)錄入的默認(rèn)值”,正如本文開頭所寫的錯(cuò)誤代碼那樣:

代碼如下: 

 if(id>0 && string.IsNullOrEmpty(name))

問(wèn)題在于,0 是否是不正常的業(yè)務(wù)數(shù)值,代碼中看不出來(lái)。不排除程序員隨意指定一個(gè)數(shù)值,作為“用戶無(wú)錄入的默認(rèn)值”,如果不巧這個(gè)默認(rèn)值,實(shí)際上是有其他意義的,那就造成問(wèn)題。 在數(shù)據(jù)庫(kù)的理論中,沒(méi)有指定的數(shù)據(jù),是用 null 來(lái)表示的,不論是 string 還是 int/long。 這是一個(gè)很好的思路,同樣可以用在這里的 sql 拼接中。因此,我們?cè)诤竺娴拇a中,使用了這個(gè):

 代碼如下: 

 if(id != null)

上述代碼中, addParameterValue(cmd,name); 是一個(gè)簡(jiǎn)單封裝的函數(shù),用來(lái)封裝如下一小段代碼,目的是讓最后的代碼,較為簡(jiǎn)捷直觀:

 代碼如下: 

 DbParameter p = cmd.CreateParameter(); p.ParameterName = "@XXX"; p.Value = TTT; cmd.Parameters.Add(p);

當(dāng)然,這個(gè) addParameterValue() 封裝函數(shù),是可有可無(wú)的。多寫幾個(gè) DbParameter p = cmd.CreateParameter() 并沒(méi)有什么大問(wèn)題。

關(guān)于動(dòng)態(tài)SQL的拼接技巧有哪些就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


本文名稱:動(dòng)態(tài)SQL的拼接技巧有哪些
當(dāng)前路徑:http://www.yuzhuanjia.cn/article/jpieee.html
主站蜘蛛池模板: 91亚洲一区二区在线观看不卡 | 91精品一区国产高清在线 | 韩国少妇午夜三级理论影院 | 午夜福利理论片高清在线观看 | 91视频在线观看免费播放 | 国产91精彩在线观看 | 福利一区二区在线 | 懂色aⅴ一区二区三区免费 懂色AV | av无码福利一区二区三区 | 91视频app下载污污 | 高清性色生活片免费播放网 | 高潮激情肉欲视频 | 99re在线播放视频 | 操亚洲美女| av一区二区三区人妻少妇 | 一区二区中文字幕网 | 国产成a人片在线观看 | 99久久国产精品欧美蜜芽 | 99精品久久毛片a片潘金莲 | 午夜男女爽爽羞羞影院在线观看 | 午夜黄色影院在线观看 | 国产v在线观看视频无码 | 丰满少妇偷人51视频 | 韩国无码又爽又刺激的A片 韩国无码中文字幕在线视频 | 一区在线免费观看 | 99国产精品蜜桃 | 二区三区丝袜 | 午夜毛片视频高清不卡免费 | 91麻豆精品一区二区 | 91精品国产手机完整 | www视频在线观看免费 | 午夜视频福利在线观看 | 91精品国产91久久久久久 | 91一区二区视频 | 91亚洲高清国产 | av在线理论片在 | 91天堂国产在线在线 | 91麻豆青娱国产 | 丁香综合网 | 午夜影城无码专区 | 日韩av毛片免费播放 |