在C#中使用部分SQL

Chr*_*ini 11 c# mysql sql parsing lexer

我需要解析部分SQL查询(它是用于SQL注入审计工具).例如

'1' AND 1=1--
Run Code Online (Sandbox Code Playgroud)

应该分解成令牌

[0] => [SQL_STRING, '1']
[1] => [SQL_AND]
[2] => [SQL_INT, 1]
[3] => [SQL_AND]
[4] => [SQL_INT, 1]
[5] => [SQL_COMMENT]
[6] => [SQL_QUERY_END]
Run Code Online (Sandbox Code Playgroud)

他们至少是基于我的SQL的词法分析器,还是C#的bison等任何好工具(尽管我不想编写我自己的语法,因为我需要支持大部分,如果不是所有MySQL 5的语法)

Mat*_*rey 2

似乎有一些很好的解析器。

这篇 SO 文章有一个使用 MS 实体框架的示例:
Parsing SQL code in C#

似乎其他人推出了自己的并将其放在代码项目上:
http://www.codeproject.com/KB/dotnet/SQL_parser.aspx

就我个人而言,我会选择实体框架解决方案,因为它是由 MS 创建和维护的,但因此它也可能与 SQL Server 紧密结合。由于您正在研究 MySQL,因此您可能希望使用代码项目上的自定义解决方案,因为我确信您可以根据语法要求在更多自定义解决方案中进行编码。

我很快就会使用这个(针对 Oracle,而不是 MySQL),所以请让社区知道该解决方案的效果如何!

更新
我刚刚回到这里并阅读了评论...经过进一步思考,我真的推荐 ANTLR,因为它支持多种语法。再说一次,我还没有使用过它,所以很高兴听到它的效果,这取决于你的决定。
/sf/ask/5325841/