我在c#中寻找一个查询验证器,它允许我从文本框中解析SQL文本,并在发送它执行之前验证它是否正确。 (MS SQL或DB2查询)。
答案 0 :(得分:26)
如果要在不使用数据库的情况下验证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;
}
}
答案 1 :(得分:6)
使用以下提示将查询设置为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'.
答案 2 :(得分:1)
如果您想验证/解析SELECT语句,无论select语句的“重载”如何,我发现验证select语句的最佳和最快方法如下: - 在你的代码中创建2个select语句(字符串),例如:
1)您的有效选择声明:SELECT * FROM HUGE_TABLE JOIN MULTIPLE_TABLES WHERE <<Condition>>
2)创建类似的选择语句,例如SELECT TOP 1 * FROM HUGE_TABLE JOIN MULTIPLE_TABLES WHERE <<Condition>>
- 解析/验证第二个,无论你有多少个连接,它都会在几毫秒内解析它,例如:
SqlCommand sqlParse = new SqlCommand(ParseSelectStatement, sqlConn);
try
{
sqlConn.Open();
sqlParse.ExecuteNonQuery()
}
希望它有所帮助!干杯!
答案 3 :(得分:-1)
我认为这就是你要找的东西。 http://www.codeproject.com/KB/database/sqlvalidator.aspx