已經(jīng)有2年沒有用過where 1=1了,沒想到換了家公司后,又讓我看到了它。在網(wǎng)絡(luò)上面搜索了一下,發(fā)現(xiàn)沒有人提供一個比較好的方案來解決這一問題。很多人說可以讓數(shù)據(jù)庫的優(yōu)化機制去處理,但是,我想對于大部分程序來說,數(shù)據(jù)庫都是負(fù)擔(dān)最重的那個。能夠自己去做優(yōu)化的話,還是不要加重數(shù)據(jù)庫的負(fù)擔(dān)了吧。以下是兩種相似的方法來解決where 1=1 的問題,供大家參考。
方案一、在數(shù)據(jù)庫底層代碼中這樣處理:
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); }
方案二、在匹配條件傳入底層方法前,調(diào)用下面通用方法:
/// <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; }
第一次發(fā)博客,有不足的地方,歡迎大家指正。
|
新聞熱點
疑難解答