久久机这里只有精品,国产69精品一区二区亚洲孕妇,91精品国产综合久久婷婷香蕉,午夜久久久久久电影

最新活動:電腦PC端+手機端+微網站+自適應網頁多模板選擇-建站388元起價!!!
當前位置:主頁 > 網站建設 > SqlServer參數化查詢之where in和like實現詳解建站知

SqlServer參數化查詢之where in和like實現詳解建站知

時間:2023-05-21 19:05:21 閱讀: 文章分類: 網站建設 作者: 網站編輯員

導讀:1建站知識若有一天你不可避免的需要提高SQL的查詢性能,需要一次性where in 幾百、上千、甚至上萬條數據時,參數化查詢將是建設網站公司網站優化seo培訓。

建設網站公司網站優化seo培訓身為一名小小的程序猿,在日常開發中不可以避免的要和where in和like打交道,在大多數情況下我們傳的參數不多簡單做下單引號、敏感字符轉義之后就直接拼進了SQL,執行查詢,搞定。若有一天你不可避免的需要提高SQL的查詢性能,需要一次性where in 幾百、上千、甚至上萬條數據時,參數化查詢將是必然進行的選擇。然而如何實現where in和like的參數化查詢,是個讓不少人頭疼的問題。 where in 的參數化查詢實現 首先說一下我們常用的辦法,直接拼SQL實現,一般情況下都能滿足需要

復制代碼 代碼如下:

string userIds = "1,2,3,4"; using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand comm = new SqlCommand(); comm.Connection = conn; comm.CommandText = string.Format("select * from Users(nolock) where UserID in({0})", userIds); comm.ExecuteNonQuery(); }

需要參數化查詢時進行的嘗試,很顯然如下這樣執行SQL會報錯錯誤

復制代碼 代碼如下:

using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand comm = new SqlCommand(); comm.Connection = conn; comm.CommandText = "select * from Users(nolock) where UserID in(@UserID)"; comm.Parameters.Add(new SqlParameter("@UserID", SqlDbType.VarChar, -1) { Value = "1,2,3,4" }); comm.ExecuteNonQuery(); }

很顯然這樣會報錯誤:在將 varchar 值 '1,2,3,4' 轉換成數據類型 int 時失敗,因為參數類型為字符串,where in時會把@UserID當做一個字符串來處理,相當于實際執行了如下語句

復制代碼 代碼如下:

select * from Users(nolock) w網站seo優化here UserID in('1,2,3,4')

若執行的語句為字符串類型的,SQL執行不會報錯,當然也不會查詢出任何結果

復制代碼 代碼如下:

using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand comm = new SqlCommand(); comm.Connection = conn; comm.CommandText = "select * from Users(nolock) where UserName in(@UserName)"; comm.Parameters.Add(new SqlParameter("@UserName", SqlDbType.VarChar, -1) { Value = "'john','dudu','rabbit'" }); comm.ExecuteNonQuery(); }

這樣不會抱任何錯誤,也查不出想要的結果,因為這個@UserName被當做一個字符串來處理,實際相當于執行如下語句

復制代碼 代碼如下:

select * from Users(nolock) where UserName in('''john'',''dudu'',''rabbit''')

由此相信大家對于為何簡單的where in 傳參無法得到正確的結果知道為什么了吧,下面我們來看一看如何實現正確的參數化執行where in,為了真正實現參數化where in 傳參,很多淫才想到了各種替代方案 方案1,使用CHARINDEX或like 方法實現參數化查詢,毫無疑問,這種方法成功了,而且成功的復用了查詢計劃,但同時也徹底的讓查詢索引失效(在此不探討索引話題),造成的后果是全表掃描,如果表里數據量很大,百萬級、千萬級甚至更多,這樣的寫法將造成災難性后果;如果數據量比較小、只想借助參數化實現防止SQL注入的話這樣寫也無可厚非,還是得看具體需求。(不推薦)

關鍵詞標簽: 詳解 參數

聲明: 本文由我的SEOUC技術文章主頁發布于:2023-05-21 ,文章SqlServer參數化查詢之where in和like實現詳解建站知主要講述詳解,參數,SqlServer參數化查詢之where in和網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/web_3793.html

我的IDC 網站建設技術SEOUC.COM
專注網站建設,SEO優化,小程序設計制作搭建開發定制網站等,數千家網站定制開發案例,網站推廣技術服務。
  • 5000+合作客服
  • 8年從業經驗
  • 150+覆蓋行業
  • 最新熱門源碼技術文章

    主站蜘蛛池模板: 托里县| 尉氏县| 乌海市| 吕梁市| 桑日县| 察哈| 丰镇市| 金坛市| 桂东县| 清新县| 揭西县| 玉环县| 永吉县| 嘉峪关市| 吉木乃县| 大石桥市| 凌云县| 枞阳县| 娱乐| 二手房| 桂林市| 霸州市| 弥勒县| 罗源县| 堆龙德庆县| 郸城县| 盖州市| 谷城县| 武山县| 柳林县| 泗阳县| 邵东县| 龙里县| 大姚县| 竹北市| 类乌齐县| 大同县| 甘德县| 民勤县| 凭祥市| 英山县|