C# 合并/标记SQL命令的方法
我想将一个“SELECT”SQL语句分解成它的逻辑组件。i、 我想创建一个像“SelectSqlStatement”这样的对象,它有一个名为“Table”、“Where”、“OrderBy”等的属性。我想这样做的原因是我不想操纵字符串,而是操纵一个对象并将其序列化回字符串 在我为.NET编写一个之前,我想知道是否有一个可用的。我搜索了一下,但什么也没看到。C# 合并/标记SQL命令的方法,c#,.net,vb.net,C#,.net,Vb.net,我想将一个“SELECT”SQL语句分解成它的逻辑组件。i、 我想创建一个像“SelectSqlStatement”这样的对象,它有一个名为“Table”、“Where”、“OrderBy”等的属性。我想这样做的原因是我不想操纵字符串,而是操纵一个对象并将其序列化回字符串 在我为.NET编写一个之前,我想知道是否有一个可用的。我搜索了一下,但什么也没看到。 仅举几个例子。你要找的是一个 *我可以很快找到VB的所有链接。TopCoder提供了一个非常强大的组件。我在一个真实的项目中使
*我可以很快找到VB的所有链接。TopCoder提供了一个非常强大的组件。我在一个真实的项目中使用了它(也是为TopCoder构建的),它工作得非常好。它的解析器语法非常复杂,超过一千行代码。重建它很可能会花费高昂的代价。听起来您真的在寻找ORM(例如nHibernate)
否则SQL语法相当复杂。如果你真的想解析,那么你需要搜索BNF语法或者根据在线书籍中提供的内容滚动你自己的BNF。虽然微软的t-SQL确实存在标准SQL语法,但快速搜索并没有避开现有的语法。祝你一切顺利 您可以使用sql server的scriptdom解析器来实现这一点。 它位于Microsoft.SqlServer.Transact-SQL.ScriptDom.dll中,并为您提供构建tsql查询的TSqlFragment的ast
static void Main(string[] args)
{
bool initialQuotedIdentifiers = false;
TSqlParser parser = new TSql110Parser(initialQuotedIdentifiers);
StreamReader sr = new StreamReader(@".\test.sql");
IList<ParseError> errors;
TSqlFragment fragment = parser.Parse(sr, out errors)
//do stuff with the fragment
//Generate tsql from the fragment
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
Sql110ScriptGenerator scriptGen = new Sql110ScriptGenerator();
scriptGen.GenerateScript(fragment, sw);
}
static void Main(字符串[]args)
{
bool initialQuoteIdentifiers=false;
TSqlParser parser=新的TSql110Parser(InitialQuoteIdentifiers);
StreamReader sr=新的StreamReader(@“\test.sql”);
IList错误;
TSqlFragment fragment=parser.Parse(sr,out错误)
//用碎片做东西
//从片段生成tsql
StreamWriter sw=新的StreamWriter(Console.OpenStandardOutput());
Sql110ScriptGenerator scriptGen=新的Sql110ScriptGenerator();
scriptGen.GenerateScript(片段,sw);
}
如果您想自己动手,我建议您与它的SQL语法一起使用,以方便解析和重建。把它的标记绑定到一个对象上,你就有了一个非常难看和沉重的SQL构建器。我绝对不想自己做:-)Hrmm,那会让事情变得复杂。然而,我确实相信nHibernate(承认它有最难进入的障碍)可以使用2.0。我编辑了我的答案,以包括一个先前的SO问题,专门针对.NET2.0