久久机这里只有精品,国产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+覆蓋行業
  • 最新熱門源碼技術文章

    主站蜘蛛池模板: 香港 | 长汀县| 和平区| 富宁县| 海原县| 佛学| 靖宇县| 磴口县| 白银市| 正蓝旗| 仁化县| 灌南县| 高阳县| 凤凰县| 瑞丽市| 泰安市| 务川| 乌拉特后旗| 高碑店市| 兴山县| 中西区| 福鼎市| 瑞昌市| 钦州市| 额敏县| 长子县| 竹溪县| 凯里市| 城步| 中卫市| 南开区| 淳化县| 新巴尔虎左旗| 清徐县| 宕昌县| 岳阳市| 烟台市| 天镇县| 平顶山市| 阜新市| 泗水县|