C# ADO.NET中設置Like模糊查詢


ADO.NET進行參數化時會自動將參數值包含在單引號中,除了特殊需求,最好不要自己手動添加單引號。ADO.NET中識別參數標識是使用符號@,如果在SQL語句中將參數標識放在單引號中,單引號中的參數標識只會被當成字符串!

所以要對LIKE語句進行參數化查詢時,就要先對參數值進行格式化,在傳參之前就設置好通配符,具體實現代碼如下:

string sql = "SELECT * FROM STORE_IN_TYPE  where del_status = 0";
            SqlParameter[] paras = { };
            //商品名稱
            if (itype_name != "")
            {
                string quanpin = XTools.XHelper.PinYinHelper.GetFull(itype_name).Trim().ToLower();
                string szm = XTools.XHelper.PinYinHelper.GetFrist(itype_name).Trim().ToLower();
                sql += $@" and (itype_name like @goods_name
                            or itype_name_py like @quanpin
                            or itype_name_fpy like @szm)";
                 paras = new SqlParameter[]{
                    XTools.XDB.SQLHelper.GetParameter("@goods_name", "%"+itype_name+"%",SqlDbType.VarChar,64),
                    XTools.XDB.SQLHelper.GetParameter("@quanpin", "%"+quanpin+"%",SqlDbType.VarChar,64),
                    XTools.XDB.SQLHelper.GetParameter("@szm", "%"+szm.Replace(" ", "")+"%",SqlDbType.VarChar,64)
                };
            }
            sql += " and create_time>= '" + dt1.ToString("yyyy-MM-dd HH:mm:ss")
                 + "' and create_time<= '" + dt2.ToString("yyyy-MM-dd HH:mm:ss") + "' ";

            SqlDataReader reader =  XTools.XDB.SQLHelper.GetReader(sql,paras);

從上面的代碼中我們可以看到具體的變換有兩點,第一點是SQL語句中取消了通配符%並且參數標識沒有被單引號包含其中,第二點則是通配符直接放到了參數值中,這樣ADO.NET在進行參數化后所生成的SQL就完全沒問題了,最終也能正確的查詢出結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM