验证SQL语法是否正确

昨天又有一个新的需求:验证文本框输入的SQL语法是否正确。于是就开始百度,其实也挺简单的。首先需要知道SET PARSEONLY { ON | OFF }”。

    当 SET PARSEONLY 为 ON 时,SQL Server 只分析语句。

    当 SET PARSEONLY 为 OFF 时,SQL Server 编译并执行语句。

    现在我们就可以完成SQL语法检测的功能了。下面是具体的代码

[csharp] view plain copy
  1. public static bool ValidateSQL(string sql)  
  2. {  
  3.     var connStr = "server=localhost;database=jhly;user id=sa;password=1";  
  4.     bool bResult;  
  5.     using (SqlConnection conn = new SqlConnection(connStr))  
  6.     {  
  7.         using (SqlCommand cmd = new SqlCommand())  
  8.         {  
  9.             if (conn.State != ConnectionState.Open)  
  10.                 conn.Open();  
  11.             cmd.Connection = conn;  
  12.             cmd.CommandText = "SET PARSEONLY ON";  
  13.               
  14.             try  
  15.             {  
  16.                 string strParams = "@starttime";  
  17.                 cmd.CommandText = sql;  
  18.                 cmd.Parameters.AddWithValue(strParams, "2010-01-01");  
  19.                 cmd.ExecuteNonQuery();  
  20.                 bResult = true;  
  21.             }  
  22.             catch (Exception ex)  
  23.             {  
  24.                 bResult = false;  
  25.                 LogHelper.Error("SQL语法错误" + ex);  
  26.             }  
  27.             finally  
  28.             {  
  29.                 cmd.CommandText = "SET PARSEONLY OFF";  
  30.                 cmd.ExecuteNonQuery();  
  31.             }  
  32.         }  
  33.     }  
  34.     return bResult;  
  35. }  

和 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 的设置在执行或运行时设置,不是在分析时设置。

    关于这块还是刚刚接触,网上有很多的介绍,大家有更深入的认识,欢迎留言,欢迎讨论     

猜你喜欢

转载自blog.csdn.net/andrewniu/article/details/80166090