使用c#进行查询validation

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

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

免责声明,此处借用此代码的代码来validationSQL脚本

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

 using Microsoft.Data.Schema.ScriptDom; using Microsoft.Data.Schema.ScriptDom.Sql; public class SqlParser { public List Parse(string sql) { TSql100Parser parser = new TSql100Parser(false); IScriptFragment fragment; IList errors; fragment = parser.Parse(new StringReader(sql), out errors); if (errors != null && errors.Count > 0) { List errorList = new List(); foreach (var error in errors) { errorList.Add(error.Message); } return errorList; } return null; } } 

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

 set PARSEONLY on 

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

 set PARSEONLY on select * from tablea 

返回没有exception。

 set PARSEONLY on select * f rom tablea 

回报

 Msg 102, Level 15, State 1, Line 2 Incorrect syntax near 'f'. 

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

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

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

希望能帮助到你! 干杯!

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