轉自 :http://www.jquerycn.cn/a_15010
為大家介紹如何用C#驗證sql語句的正確性,就像sql查詢分析器中的檢測代碼功能一樣,有需要的朋友,可以參考下。
需要用到如下的知識:
SET PARSEONLY
檢查每個 Transact-SQL 語句的語法並返回任何錯誤消息,但不編譯和執行語句。
SET PARSEONLY { ON | OFF }
當 SET PARSEONLY 為 ON 時,SQL Server 只分析語句。當 SET PARSEONLY 為 OFF 時,SQL Server 編譯並執行語句。
SET PARSEONLY 的設置是在分析時設置,而不是在執行或運行時設置。
在存儲過程或觸發器中不要使用 PARSEONLY。如果 OFFSETS 選項為 ON 而且沒有出現錯誤,則 SET PARSEONLY 返回偏移量。
SET NOEXEC (Transact-SQL)
編譯每個查詢但不執行查詢。
SET NOEXEC { ON | OFF }
當 SET NOEXEC 為 ON 時,SQL Server 將編譯每一批處理 Transact-SQL 語句但並不執行它們。當 SET NOEXEC 設置為 OFF 時,所有批處理將在編譯后執行。
SQL Server 中的語句執行包含兩個階段:編譯和執行。
該設置可用於讓 SQL Server 在執行 Transact-SQL 代碼時,驗證代碼中的語法和對象名。
也可以用於調試通常是較大的批處理中的部分語句。
SET NOEXEC 設置是在執行或運行時設置,而不是在分析時設置。
SET PARSEONLY的代碼如下:
public bool ValidateSQL(string sql) { bool bResult; SqlCommand cmd = _conn.CreateCommand(); cmd.CommandText = "SET PARSEONLY ON"; cmd.ExecuteNonQuery(); try { cmd.CommandText = sql; cmd.ExecuteNonQuery(); bResult = true; } catch (Exception ex) { bResult = false; } finally { cmd.CommandText = "SET PARSEONLY OFF"; cmd.ExecuteNonQuery(); } return bResult; }
有興趣的朋友,可以親自測試下,看看效果如何?!
可以把以上代碼寫成類中的方法,以后每次執行時都提前驗證下,是不是很酷哦。