【问题标题】:Lexing partial SQL in C#在 C# 中对部分 SQL 进行词法分析
【发布时间】:2011-02-25 18:00:47
【问题描述】:

我需要解析部分 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# 的野牛(尽管我宁愿不编写自己的语法,因为我需要支持 MySQL 5 的大部分语法,如果不是全部的话)

【问题讨论】:

标签: c# sql mysql parsing lexer


【解决方案1】:

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

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

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

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

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

更新
我刚刚回到这个并阅读了 cmets ......经过进一步思考,我真的推荐 ANTLR,因为它支持多种语法。再说一次,我没有使用过它,所以很高兴听到它是如何工作的,这取决于你。
https://stackoverflow.com/questions/76083/parsing-sql-in-net/76151

【讨论】:

  • 另外,我用谷歌搜索了这些答案的“C# sql parser”。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    相关资源
    最近更新 更多