我有一个 SelectSQLQueryBuilder,其中有一个只读文本框。用户输入数据并生成字符串!我必须检查这个字符串是否是 SQL 语句。
在 SQL SERVER MGMT STUDIO 中,执行旁边有一个按钮,无需触发语句即可执行此操作。.NET 中的任何类都可以这样做吗?我怎样才能验证这个字符串!请帮忙!!
如果您像这样将语句发送到 SQLServer
set PARSEONLY ON
your statement
服务器将解析您的语句但不执行它并返回任何错误。如果它通过了,你就会知道这是一个有效的声明。
您将不知道它是否会真正运行,因为 PARSEONLY 未检测到某些类型的错误。例如,您的 SQL 有效但会导致非法操作(如数据转换或违反约束)的错误。
因此,虽然 .Net 中可能没有类,但您可以通过将 set 命令添加到您的 sql 来使 parseonly 发生。我相信这是 SQL Management Studio 使用的功能。您可能会注意到 SQL Mgt. Studio 无法解析语句,除非它具有服务器连接。
PARSEONLY 是连接级别设置。所以如果你打开它,如果你真的想在那个连接上执行 SQL,你需要再次关闭它。
对于 Transact-SQL,您可以考虑使用TSql100Parser Class。
还有一个名为General SQL Parser的产品,它不是免费的,但已经存在了一段时间。
通常,问题在于解析 SQL 语句。事实证明,由于语言的复杂性以及众多的变化,这相当困难。
存在一个很好的库来处理这些复杂性并解析 SQL- http: //sqlparser.com/ 。