好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 編程經驗點滴 動態(tài)SQL的拼接技巧

編程經驗點滴 動態(tài)SQL的拼接技巧

熱門標簽:南京電銷外呼系統(tǒng)運營商 溫州語音外呼系統(tǒng)代理 西安青牛防封電銷卡 北京辦理400電話多少 威海智能語音外呼系統(tǒng) 400電話申請需要開戶費嗎 重慶防封電銷機器人供應商 山西語音外呼系統(tǒng)價格 智能語音外呼系統(tǒng)哪個牌子好
常見的誤解有:
1. 只用 ado.net ,無法進行動態(tài) SQL 拼接。
2. 有幾個動態(tài)參數,代碼的重復量就成了這些參數的不同數量的組合數,動態(tài)參數越多,重復量越大。

對于第二個問題,以下的錯誤代碼為其證據:
復制代碼 代碼如下:

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);
}

這兩個問題都很好解決,給一個正確的代碼例子大家看看即可:
復制代碼 代碼如下:

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;

這里的技巧在于,使用了一個 "where 1=1", 巧妙解決了后續(xù) sql 拼接中,每行開頭是否要有 "and" 的問題。而這個 "where 1=1",并不會對數據庫的索引執(zhí)行,造成性能上的影響。

對參數進行排列組合,然后寫各種組合的 SQL,這個思路很奇怪。問題是,很多初學者,都有這個思維習慣。本人不是計算機科班出身,不知道是否哪本教科書,就是如此教導的。但很不幸的是,這個思維習慣是錯誤的。

"where 1=1" 雖是教科書中沒有的小技巧,卻很管用。


另外,在程序中,一般會在用戶界面上讓使用用戶錄入數字,這個數字的數值,在代碼中會自動變成 string,然后嘗試 string 轉換成 int/long,最后送到 sql 函數里。這里需要特別注意的是,很多人把某個特殊的數值,作為“用戶無錄入的默認值”,正如本文開頭所寫的錯誤代碼那樣:

復制代碼 代碼如下:

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


問題在于,0 是否是不正常的業(yè)務數值,代碼中看不出來。不排除程序員隨意指定一個數值,作為“用戶無錄入的默認值”,如果不巧這個默認值,實際上是有其他意義的,那就造成問題。

在數據庫的理論中,沒有指定的數據,是用 null 來表示的,不論是 string 還是 int/long。

這是一個很好的思路,同樣可以用在這里的 sql 拼接中。因此,我們在后面的代碼中,使用了這個:
復制代碼 代碼如下:

if(id != null)

上述代碼中,

addParameterValue(cmd,name); 是一個簡單封裝的函數,用來封裝如下一小段代碼,目的是讓最后的代碼,較為簡捷直觀:
復制代碼 代碼如下:

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

當然,這個 addParameterValue() 封裝函數,是可有可無的。多寫幾個 DbParameter p = cmd.CreateParameter() 并沒有什么大問題。
您可能感興趣的文章:
  • 基于Oracle的高性能動態(tài)SQL程序開發(fā)
  • 為什么ASP中執(zhí)行動態(tài)SQL總報錯誤信息?提示語句語法錯誤
  • 批處理 動態(tài)sql
  • 動態(tài)SQL語句使用心得
  • sqlserver 支持定位當前頁,自定義排序的分頁SQL(拒絕動態(tài)SQL)
  • oracle中動態(tài)SQL使用詳細介紹
  • mysql存儲過程 在動態(tài)SQL內獲取返回值的方法詳解
  • MySQL 存儲過程中執(zhí)行動態(tài)SQL語句的方法
  • mybatis的動態(tài)sql詳解(精)

標簽:黃山 金昌 濟寧 中衛(wèi) 新余 河源 宜春 貸款群呼

巨人網絡通訊聲明:本文標題《編程經驗點滴 動態(tài)SQL的拼接技巧》,本文關鍵詞  編程,經驗,點滴,動態(tài),SQL,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《編程經驗點滴 動態(tài)SQL的拼接技巧》相關的同類信息!
  • 本頁收集關于編程經驗點滴 動態(tài)SQL的拼接技巧的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 精产国品一二三产区7777| b站刺激战场直播视频怎么看| yy6080理论大片一级久久| 国产成人亚洲精品77| 中文字幕欧美激情一区| 18黄禁| 欧美va亚洲va国产综合| 黄色日本电影| 国产真实伦对白全集| 99热只有精品一区二区| 两性视频久久| 胸大的姑娘的图片| 1024手机看片人妻人伦电影网| 婷婷伊人精品一区二区| 办公室激情嗯啊老师娇喘| 国产精品一久久香蕉产线看| 嗯啊开小嫩苞hhh军人小说| 日韩有码视频在线| 浓厚な接吻と肉体の交わり| 午夜精品视频一区二区三区在线看| 美女模特被c?免费视频| 羞羞漫画韩版| 弃妇扶摇录| 一级乱电影在线观看国语| 一本无码人妻一区二区| 丰满双乳峰白嫩少妇www91| se94se在线看片secom| gogo全球高清大尺度摄影葫| 欧美精品在线观看视频| 日产做受???久久久| H无码无翼乌在线看日本动漫| 右眉尾有痣的女人| 午夜精| 欧美精产国品一二三产品区别| 娇妻随军被cao成sao浪贱小说| 欧美影院老牛影院| 可以免费看情的软件大全| 娇妻销魂的乳峰浑圆呻吟高H漫画 文枫揉捏柔佳乳峰的小说叫什么 柔佳啊轻点灬太粗太长了 | 精品久久久久成人无码免费动漫 | 日本理论在线看片| 欧美日产国产精品|