已經有2年沒有用過where 1=1了,沒想到換了家公司後,又讓我看到了它。在網絡上面搜索了一下,發現沒有人提供一個比較好的方案來解決這一問題。很多人說可以讓數據庫的優化機制去處理,但是,我想對於大部分程序來說,數據庫都是負擔最重的那個。能夠自己去做優化的話,還是不要加重數據庫的負擔了吧。以下是兩種相似的方法來解決where 1=1 的問題,供大家參考。
方案一、在數據庫底層代碼中這樣處理:
if (!String.IsNullOrEmpty(strWhere)) { string str = strWhere.TrimStart();//去除前置空格 if (str.ToLower().IndexOf("and ") == 0)//若以and開頭則自動去除第一個and { strWhere = str.Substring(4);//若要保留前面一個空格,可以改爲3 } strSql.Append(" where " + strWhere); }
方案二、在匹配條件傳入底層方法前,調用下面通用方法:
/// <summary> /// 驗證sql匹配條件是否正確(若以and開頭則自動去除) /// </summary> /// <param name="where">sql匹配條件</param> public static string CheckWhere(string where) { string str = where.TrimStart();//去除前置空格 if (str.ToLower().IndexOf("and ") == 0)//若以and開頭則自動去除第一個and { where = str.Substring(4);//若要保留前面一個空格,可以改爲3 } return where; }
第一次發博客,有不足的地方,歡迎大家指正。