C#中驗證sql語句是否正確(不執(zhí)行語句)
SET PARSEONLY
檢查每個 Transact-SQL 語句的語法并返回任何錯誤消息,但不編譯和執(zhí)行語句。
SET PARSEONLY { ON | OFF }
當 SET PARSEONLY 為 ON 時,SQL Server 只分析語句。當 SET PARSEONLY 為 OFF 時,SQL Server 編譯并執(zhí)行語句。
SET PARSEONLY 的設(shè)置是在分析時設(shè)置,而不是在執(zhí)行或運行時設(shè)置。
在存儲過程或觸發(fā)器中不要使用 PARSEONLY。如果 OFFSETS 選項為 ON 而且沒有出現(xiàn)錯誤,則 SET PARSEONLY 返回偏移量。
SET NOEXEC (Transact-SQL)
編譯每個查詢但不執(zhí)行查詢。
SET NOEXEC { ON | OFF }
當 SET NOEXEC 為 ON 時,SQL Server 將編譯每一批處理 Transact-SQL 語句但并不執(zhí)行它們。當 SET NOEXEC 設(shè)置為 OFF 時,所有批處理將在編譯后執(zhí)行。
SQL Server 中的語句執(zhí)行包含兩個階段:編譯和執(zhí)行。該設(shè)置可用于讓 SQL Server 在執(zhí)行 Transact-SQL 代碼時,驗證代碼中的語法和對象名。它也可以用于調(diào)試通常是較大的批處理中的部分語句。
SET NOEXEC 設(shè)置是在執(zhí)行或運行時設(shè)置,而不是在分析時設(shè)置。
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;
}
相關(guān)文章
深入c# 類和結(jié)構(gòu)的區(qū)別總結(jié)詳解
本篇文章是對c#中類和結(jié)構(gòu)的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-05-05c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的區(qū)別詳解
這篇文章主要介紹了c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的區(qū)別,需要的朋友可以參考下2014-07-07