告別where 1=1 最佳方案分享

已經有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;
        }
複製代碼

第一次發博客,有不足的地方,歡迎大家指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章