我想用C#解析SQL代码.

具体来说,有没有免费提供的解析器可以解析SQL代码,并从中生成树或任何其他 struct ?它还应该为嵌套 struct 生成适当的树.

它还应该返回该树的 node 代表的语句类型.

例如,如果 node 包含循环条件,那么它应该返回 node 的"循环类型".

或者有什么方法可以解析C#中的代码并生成我想要的类型的树?

推荐答案

[警告:自2021年起,答案可能不再适用]

使用微软Entity Framework(EF).

它有一个"实体SQL"解析器,可以构建一个表达式树,

using System.Data.EntityClient;
...
EntityConnection conn = new EntityConnection(myContext.Connection.ConnectionString);
conn.Open();
EntityCommand cmd = conn.CreateCommand();
cmd.CommandText = @"Select t.MyValue From MyEntities.MyTable As t";
var queryExpression = cmd.Expression;
....
conn.Close();

或者类似的,在MSDN上查看.

这一切都在鲍尔默的滴答声中:——

代码项目中还有一个是100.

祝你好运

Sql相关问答推荐

SQL组通过聚合到单独的列中

如何并行SELECT和RESET?

GROUP BY与多个嵌套查询T—SQL

如何退回当年的所有参赛作品?""

在postgres中动态计算出现次数并插入到json中

如何使用ROW_NUM() Select 一个没有第二条记录的实例?

在SQL Server中设置关联对象的有效JSON格式

在xml.Modify方法中使用子字符串和可能的替代方法

如何使用不重复的单个顶级字段(列)向json数组 Select 多行

将时间范围划分为全天和前后剩余小时

向表中添加新列取决于表的日期列(unpivot)

在同一列上迭代时计算持续时间

日期逻辑(查找过go 90 天内的第一个匹配行)

如何向 mariadb 添加外键?

SQL Server中使用min()和max()从选定的特定值id表中删除不必要的时间

识别SQL Server中的重复数字

SQL中如何转置表格 UNPIVOT是唯一的 Select 吗?

自动生成计算频率的列

为 sqlite 全文搜索 (fts) 创建触发器时出现虚拟表的不安全使用

在给定列中具有特定值的行与 SQL 中的总行数的比率