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