C#学习教程:在c#中解析SQL字符串我不想运行查询。我只是想看看执行命令时查询是否成功。说我有;“SELECT*FROMSomeTableWHERE(1=1)”这个字符串会成功。但是,“SELECT*FROMSomeTableWHERE(1=1”)不会成功。现在我的问题。我将如何解析这个字符串c#?如果你只是想验证语法。你可以使用Microsoft.Data.Schema.ScriptDom。使用Microsoft.Data.Schema.ScriptDom;使用Microsoft.Data.Schema.ScriptDom.Sql;.....stringsql="SELECT*FROMSomeTableWHERE(1=1");varp=newTSql100Parser(true);IList错误;p.Parse(newStringReader(sql),outerrors);if(errors.Count==0)Console.Write("NoErrors");elseforeach(ParseErrorparseErrorinerrors)控制台.Write(parseError.Message);我尝试了一些用于在代码中解析/操作/生成SQL的库。最新的是ActiveQueryBuilder,但我知道那里有很多。使用AQB-你将能够“验证”SQL,但我认为你会遇到问题是它不是100%。我使用的没有一个对实际数据库给出相同的结果。你会发现某些SQL字符串对你的解析器有效但对数据库无效,反之亦然。对于例如,在AQB中,如果没有为子查询提供别名,则不能有子查询,否则解析器会抛出异常-但Oracle很乐意接受并运行相同的SQL。根据数据库的不同,您应该能够在不运行SQL的情况下要求DATABASE验证SQL。在SQLServer中,我相信您可以使用Oracle中的Prepare语句,我认为它被称为ExplainPlan。这是我发现获得一致结果的唯一方法。当然,如果您的查询很简单,或者您不需要100%的准确率,则可能工作量更大。基于您使用的是SqlCommand这一事实,我假设您想检查针对SqlServer的语句的正确性。正如已经指出的那样,准备好的声明是最合适的。在c#方面,您只能检查语法正确性,没有别的(这并不意味着查询会通过)。准备好的语句将检查名称解析、绑定等,但它将包括到服务器的往返行程。此外,您必须了解它的局限性(例如临时对象)。有关TSQLPrepare语句的更多信息,请查看此处。正如您所说:“我不想运行查询。”如果您只是需要验证MicrosoftSQLServer的SQL语法,Microsoft.Data.Schema.ScriptDom是一个不错的选择。否则,您可能会考虑其他SQLParsers,例如GeneralSQLParser(支持Oracle、SQLServer、DB2、MySQL、Teradata、PostgreSQL),它可以帮助您在程序中执行离线SQL语法检查。这可以通过在形式语法的帮助下分析您的查询来完成,但这对您来说可能是一个过载,这完全取决于您的使用场景。对于任何形式语言的分析,我推荐你使用Irony库,它在生产和个人项目中都非常流行,并且已经内置了SQL语法,因此只需调用初始化程序即可。它会为您提供有关错误及其类型的信息,但对于更简单的建议,请使用Ira。以上就是C#学习教程:c#解析SQL字符串全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
