使用c#进行查询验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用c#进行查询验证相关的知识,希望对你有一定的参考价值。

我正在寻找c#中的查询验证器,它允许我从文本框中解析SQL文本,并在发送它执行之前验证它是否正确。 (MS SQL或DB2查询)。

答案

如果要在不使用数据库的情况下验证SQL语法,TSql100Parser类将适用于这种情况。

免责声明,从这篇文章借来的代码Code to validate SQL Scripts

虽然很简单易用。如果它返回null,则解析它时没有错误。

using Microsoft.Data.Schema.ScriptDom;
using Microsoft.Data.Schema.ScriptDom.Sql;

public class SqlParser
{
        public List<string> Parse(string sql)
        {
            TSql100Parser parser = new TSql100Parser(false);
            IScriptFragment fragment;
            IList<ParseError> errors;
            fragment = parser.Parse(new StringReader(sql), out errors);
            if (errors != null && errors.Count > 0)
            {
                List<string> errorList = new List<string>();
                foreach (var error in errors)
                {
                    errorList.Add(error.Message);
                }
                return errorList;
            }
            return null;
        }
}
另一答案

使用以下提示将查询设置为sql:

set PARSEONLY  on

它只检查您的查询并返回,如下所示:

set PARSEONLY  on
select * from tablea

返回没有异常。

set PARSEONLY  on
select * f rom tablea

回报

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near 'f'.
另一答案

如果您只想验证/解析SELECT语句,无论select语句的“繁重”如何,我发现验证select语句的最佳和最快方法如下: - 在您的代码中创建2 select语句(字符串),例如:

1)你的有效select语句:SELECT * FROM HUGE_TABLE JOIN MULTIPLE_TABLES WHERE <<Condition>> 2)创建一个类似的select语句,如SELECT TOP 1 * FROM HUGE_TABLE JOIN MULTIPLE_TABLES WHERE <<Condition>> - Parse / Validate只是第二个,无论你有多少个连接,它都会在几毫秒内解析它,例如:

SqlCommand sqlParse = new SqlCommand(ParseSelectStatement, sqlConn); 

try 
{
sqlConn.Open();
sqlParse.ExecuteNonQuery()
}

希望能帮助到你!干杯!

另一答案

我想这就是你要找的东西。 http://www.codeproject.com/KB/database/sqlvalidator.aspx

以上是关于使用c#进行查询验证的主要内容,如果未能解决你的问题,请参考以下文章

推进学说代码片段

教程4 - 验证和权限

你如何在 python 中处理 graphql 查询和片段?

PHP 代码片段

如何在 graphQL 片段中定义可选字段以进行查询

使用 savedInstanceState 保存片段状态