用反语解析SQL语句

Dan*_*gen 14 c# sql irony

我正在尝试创建一个将常规sql语句转换为c#对象的方法,所以我决定使用Irony来解析sql语句然后我将该语句作为Action返回,其中包含语句的类型及其值取决于类型

这是我未完成的代码[因为我感到沮丧因为我不知道该怎么办]

private List<Action> ParseStatement(string statement)
{
    var parser = new Parser(new SqlGrammar());
    var parsed = parser.Parse(statement);
    var status = parsed.Status;

    while (parsed.Status == ParseTreeStatus.Parsing)
    {
        Task.Yield();
    }

    if (status == ParseTreeStatus.Error)
        throw new ArgumentException("The statement cannot be parsed.");

    ParseTreeNode parsedStmt = parsed.Root.ChildNodes[0];

    switch (parsedStmt.Term.Name)
    {
        case "insertStmt":
            var table = parsedStmt.ChildNodes.Find(x => x.Term.Name == "Id").ChildNodes[0].Token.ValueString;
            var valuesCount =
                parsedStmt.ChildNodes.Find(x => x.Term.Name == "insertData").ChildNodes.Find(
                    x => x.Term.Name == "exprList").ChildNodes.Count;
            var values = parsedStmt.ChildNodes.Find(x => x.Term.Name == "insertData").ChildNodes.Find(
                    x => x.Term.Name == "exprList").ChildNodes;
            foreach (var value in values)
            {
                string type = value.Token.Terminal.Name;
            }
            break;
    }

    return null;
}

private Type ParseType(string type)
{
    switch (type)
    {
        case "number":
            return typeof (int);
        case "string":
            return typeof (string);
    }

    return null;
}
Run Code Online (Sandbox Code Playgroud)

所以这里的问题是:我如何利用Irony将字符串SQL语句转换为ac#对象?

这是我想要实现的一个例子:

插入人物价值(4,'Nilsen','Johan','Bakken 2','Stavanger')

并将其转换为

return new Action<string type, string table, int val1, string val2, string val3, string val4, string val5>;
Run Code Online (Sandbox Code Playgroud)

动态地取决于方法从语句中读取的内容.

我希望我已经很好地解释了我的想法,所以你可以帮助我们,如果有什么不清楚请告诉我,我会尝试解释它.

小智 1

如果您不将此作为一个有趣的练习,我建议您使用 Linq to SQL 来生成存根类或实体框架,如评论中提到的 Drunken Code Monkey。

这是一篇可以帮助您入门的好文章: 从现有数据库生成 EF 代码