验证SQL语法是否正确
昨天又有一个新的需求:验证文本框输入的SQL语法是否正确。于是就开始百度,其实也挺简单的。首先需要知道“SET PARSEONLY { ON | OFF }”。
当 SET PARSEONLY 为 ON 时,SQL Server 只分析语句。
当 SET PARSEONLY 为 OFF 时,SQL Server 编译并执行语句。
现在我们就可以完成SQL语法检测的功能了。下面是具体的代码
[csharp] view plain copy- 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 的设置在执行或运行时设置,不是在分析时设置。
关于这块还是刚刚接触,网上有很多的介绍,大家有更深入的认识,欢迎留言,欢迎讨论
发布评论