大家好,又见面了,我是你们的朋友全栈君。
昨天又有一个新的需求:验证文本框输入的SQL语法是否正确。于是就开始百度,其实也挺简单的。首先需要知道“SET PARSEONLY { ON | OFF }”。
当 SET PARSEONLY 为 ON 时,SQL Server 只分析语句。
当 SET PARSEONLY 为 OFF 时,SQL Server 编译并执行语句。
现在我们就可以完成SQL语法检测的功能了。下面是具体的代码
代码语言:javascript复制 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;
}
和 SET PARSEONLY 相关的还有SET NOEXEC,
当 SET NOEXEC 为 ON 时,SQL Server 将编译每一条Tran-SQL语句但并不执行它们。
当 SET NOEXEC 为 OFF 时,SQL Server 编译并执行语句。
他们之间的一些区别:
1.SET PARASEONLY 检查每个Tran-SQL 的语法并返回错误消息,不编译和执行语句。
SET NOEXEC 编译每个查询但不执行查询。
2.SET PARASEONLY 的设置是在分析时设置,不是在执行或运行时设置。
SET NOEXEC 的设置在执行或运行时设置,不是在分析时设置。
关于这块还是刚刚接触,网上有很多的介绍,大家有更深入的认识,欢迎留言,欢迎讨论
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105673.html原文链接:https://javaforall.cn