使用c#进行查询验证

Can*_*non 17 c# sql sql-server db2

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

Fei*_*ngo 27

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

免责声明,此处借此代码借用代码来验证SQL脚本

虽然很简单易用.如果它返回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;
        }
}
Run Code Online (Sandbox Code Playgroud)

  • TSql100Parser是Microsoft.SqlServer.TransactSql.ScriptDom.dll IScriptFragment的一部分,具有更新的VSBuilds,现在是TSqlFragment (4认同)

Dev*_*erX 8

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

set PARSEONLY  on
Run Code Online (Sandbox Code Playgroud)

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

set PARSEONLY  on
select * from tablea
Run Code Online (Sandbox Code Playgroud)

返回没有异常.

set PARSEONLY  on
select * f rom tablea
Run Code Online (Sandbox Code Playgroud)

回报

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near 'f'.
Run Code Online (Sandbox Code Playgroud)