程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 告別where 1=1 最佳方案分享,告別where

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

編輯:C#入門知識

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


已經有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;
        }

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


為何SQL語句加 1=1

是為了鏈接下面的查詢條件條件,也或者是替換沒有查詢條件的語句。
比如:要把檢索條件作為一個參數傳遞給SQL,那麼,當這個檢索語句不存在的話就可以給它賦值為1=1.這樣就避免了SQL出錯,也就可以把加條件的SQL和不加條件的SQL合二為一。
 

oracle中1=1是什,舉個例子

1=1即為true,用在where條件或是循環語句,
select * from table where 1=1即查詢滿足1=1的所有數據,此時where條件相當於沒有生效
說白了這語句就是沒用,不過這種情況一般用於語句拼接,
在where 1=1 之後可以任意拼接條件,直接拼接and A=‘a’之類的
這樣省去了判斷前面是否有where關鍵字和是否需要加and關鍵字
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved