C#:SQL查询构建器类

我在哪里可以找到一个好的SQL Query构建器类。 我只需要一个简单的类来构建一个SQL字符串,就是这样。 我需要它用于C#和MySql。 我真的不需要像Linq或NHibernate这样的东西。 谢谢

由于谷歌引导我到这个页面,我建议SqlKata ,一个简单但function强大的SqlQuery Builder,它支持嵌套条件,子查询和连接的地方。

目前它支持SqlServer,MySql和PostgreSql

var query = new Query("Users") .LeftJoin("Countries", "Users.CountryId", "Countries.Id") .Where("Status", "blocked") .OrWhereIn("Id", new [] {10, 11, 12}) .OrWhere("LastLogin", ">", DateTime.UtcNow.AddMonths(-5)); 

注意:我是它的所有者

您可以使用框架类CommandBuilder。 查看:

http://msdn.microsoft.com/en-us/library/tf579hcz.aspx

如果您使用的是.NET 4并且不介意使用动态,您可以使用由Rob Conery创建的Massive ,这个单个文件数据库不需要dll,只需删除Massive.cs文件就可以了。

您可以使用Massive来构建这样的查询。

 //grab all the products var products = table.All(); //Or var productsFour = table.All(columns: "ProductName as Name", where: "WHERE categoryID=@0",args: 4); 

您还可以根据需要运行即席查询:

 var result = tbl.Query("SELECT * FROM Categories"); 

我使用这个代码..它也逃避字符串我希望它有助于:

  class Mysql { public static string INSERT(string INTO, NameValueCollection VALUES) { string queryString = "INSERT INTO " + INTO + " ("; for (int i = 0; i < VALUES.Count; i++) { queryString += VALUES.Keys[i] + (i + 1 == VALUES.Count ? "" : ","); } queryString += ") VALUES ("; for (int i = 0; i < VALUES.Count; i++) { queryString += Escape(VALUES[VALUES.Keys[i]]) + (i + 1 == VALUES.Count ? ("") : (",")); } queryString += ");"; return queryString; } public static string DELETE(string FROM, NameValueCollection WHERE) { string queryString = "DELETE FROM " + FROM + " WHERE"; for (int i = 0; i < WHERE.Count; i++) { queryString += " " + WHERE.Keys[i] + "=" + Escape(WHERE[WHERE.Keys[i]]); } queryString += ";"; return queryString; } public static string UPDATE(string UPDATE, NameValueCollection SET, NameValueCollection WHERE) { string queryString = "UPDATE " + UPDATE + " SET"; for (int i = 0; i < SET.Count; i++) { queryString += " " + SET.Keys[i] + "=" + data.Escape(SET[SET.Keys[i]]) + (i + 1 == SET.Count ? ("") : (",")); } queryString += " WHERE"; for (int i = 0; i < WHERE.Count; i++) { queryString += " " + WHERE.Keys[i] + "=" + data.Escape(WHERE[WHERE.Keys[i]]); } queryString += ";"; return queryString; } public static string SELECT(string[] SELECT, string FROM, NameValueCollection WHERE) { string queryString = "SELECT "; for (int i = 0; i < SELECT.Length; i++) { queryString += SELECT[i] + (i + 1 == SELECT.Length ? ("") : (",")); } queryString += " FROM " + FROM + " WHERE "; for (int i = 0; i < WHERE.Count; i++) { queryString += " " + WHERE.Keys[i] + "=" + Escape(WHERE[WHERE.Keys[i]]); } queryString += ";"; return queryString; } public static string Escape(string input) { using (var writer = new StringWriter()) { using (var provider = CodeDomProvider.CreateProvider("CSharp")) { provider.GenerateCodeFromExpression(new CodePrimitiveExpression(input), writer, null); return writer.ToString(); } } } } 

你这样使用它:

  NameValueCollection nvc_for_SET_and_VALUES=new NameValueCollection(); NameValueCollection nvc_for_WHERE= new NameValueCollection(); nvc_for_WHERE.Add("arg1","value1"); nvc_for_WHERE.Add("AND arg2","value2"); nvc_for_WHERE.Add("OR arg2","value3"); nvc_for_SET_and_VALUES.Add("arg", "value"); nvc_for_SET_and_VALUES.Add("arg2", "value2"); string[] fieldsToSelect= { "arg1", "arg2" }; Mysql.DELETE("mytable", nvc_for_WHERE); Mysql.INSERT("mytable", nvc_for_SET_and_VALUES); Mysql.SELECT(fieldsToSelect, "mytable", nvc_for_WHERE); Mysql.UPDATE("mytable", nvc_for_SET_and_VALUES, nvc_for_WHERE); 

Mohammed Hadi,使用DbExtensions您的样本可以是这样的:

  public static string InsertQuery(string into, NameValueCollection values) { var query = SQL .INSERT_INTO(into + " (" + String.Join(" ,", values.Keys.Cast().ToArray()) + ")") .VALUES(values.Keys.Cast().Select(key => values[key])); return query.ToString(); }