使用C#进行查询验证

本文关键字:查询 验证 使用 | 更新日期: 2023-09-27 17:58:39

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

使用C#进行查询验证

如果您想在不使用数据库的情况下验证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;
        }
}

使用以下提示将查询设置为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 * FROM HUGE_TABLE JOIN MULTIPLE_TABLES WHERE <<Condition>> 2) 创建类似的select语句,如SELECT TOP 1 * FROM HUGE_TABLE JOIN MULTIPLE_TABLES WHERE <<Condition>> -只解析/验证第二个,不管你有多少个连接,它都会在几毫秒内解析它,比如:

SqlCommand sqlParse = new SqlCommand(ParseSelectStatement, sqlConn); 
try 
{
sqlConn.Open();
sqlParse.ExecuteNonQuery()
}

希望它能有所帮助!干杯

我想这就是您想要的。http://www.codeproject.com/KB/database/sqlvalidator.aspx