在C#中使用部分SQL

时间:2010-05-30 17:58:03

标签: c# sql mysql parsing lexer

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

'1' AND 1=1--

应该分解为像

这样的标记
[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]

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

2 个答案:

答案 0 :(得分:2)

似乎那里有一些好的解析器。

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

似乎其他人自己推出并将其放在Code Project上:
http://www.codeproject.com/KB/dotnet/SQL_parser.aspx

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

我很快就会使用它(对于Oracle,而不是MySQL),所以请让社区知道解决方案是如何工作的!

更新的:
我刚回到这里阅读评论......经过进一步的反思,我真的推荐ANTLR,因为它支持多种语法。再一次,我没有使用它,所以听听它是如何成功的很好,这取决于你的决定。
https://stackoverflow.com/questions/76083/parsing-sql-in-net/76151

答案 1 :(得分:1)

也可能有一些方法可以通过Visual Studio的数据库版本使用完全解析(由Microsoft)T-SQL -

  

数据库的皇冠上的宝石   版产品是SQL解析器   和脚本生成器,这两件   形成什么的基础   数据库项目系统呢   内部。

http://blogs.msdn.com/b/gertd/archive/2008/08/21/getting-to-the-crown-jewels.aspx