檢查SQL語句是否合法


昨天又有一個新的需求:驗證文本框輸入的SQL語法是否正確。

於是就開始百度,其實也挺簡單的。

 

首先需要知道“SET PARSEONLY { ON | OFF }”。

 

    當 SET PARSEONLY 為 ON 時,SQL Server 只分析語句。

    當 SET PARSEONLY 為 OFF 時,SQL Server 編譯並執行語句。

 

和 SET PARSEONLY 相關的還有SET NOEXEC ON,

 

    當 SET NOEXEC 為 ON 時,SQL Server 將編譯每一條Tran-SQL語句但並不執行它們。

    當 SET NOEXEC 為 OFF 時,SQL Server 編譯並執行語句。

 

    現在我們就可以完成SQL語法檢測的功能了。 

    下面是具體的代碼, 可以將其中的 ParseOnly  調整為 NoExec 

 

public static bool ValidateSQL(string sql)  
{  
    var connStr = "server=localhost;database=jhly;user id=sa;password=1";  
    bool bResult;  
    using (SqlConnection conn = new SqlConnection(connStr))  
    {  
        using (SqlCommand cmd = new SqlCommand())  
        {  
            if (conn.State != ConnectionState.Open)  
                conn.Open();  
            cmd.Connection = conn;  
            cmd.CommandText = "SET PARSEONLY ON";  
              
            try  
            {  
                string strParams = "@starttime";  
                cmd.CommandText = sql;  
                cmd.Parameters.AddWithValue(strParams, "2010-01-01");  
                cmd.ExecuteNonQuery();  
                bResult = true;  
            }  
            catch (Exception ex)  
            {  
                bResult = false;  
                LogHelper.Error("SQL語法錯誤" + ex);  
            }  
            finally  
            {  
                cmd.CommandText = "SET PARSEONLY OFF";  
                cmd.ExecuteNonQuery();  
            }  
        }  
    }  
    return bResult;  
}  

 

 

他們之間的一些區別:

1.SET PARASEONLY 檢查每個Tran-SQL 的語法並返回錯誤消息,不編譯和執行語句。

  SET NOEXEC 編譯每個查詢但不執行查詢。

2.SET PARASEONLY 的設置是在分析時設置,不是在執行或運行時設置。

  SET NOEXEC 的設置在執行或運行時設置,不是在分析時設置。

 

本文轉自: https://blog.csdn.net/andrewniu/article/details/80166090

 


免責聲明!

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



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