c# 快速產生 sql query 的一大利器, 可搭配 dapper 使用, 並支援多資料庫(Sql, MySQL, etc)
去年在開發專案時無意間找到的一個 Sql Builder 的套件, 當時此套件還在開發階段(v0.x), 尚未上到 Nuget 時便覺得此套件的發展潛力無窮. 目前以正式發行上 Nuget 供開發人員使用(目前版本: v1.1). 在搭配 Dapper 有種如虎添翼的感覺, 大幅減少程式內撰寫 sql 的可能性. 以下簡單操作 SqlKata 的 CRUD 供開發人員參考(SqlKata 支援更多的語法產生, 詳細操作可參考官網文件: https://sqlkata.com/docs/)
- 在 Nuget 上安裝 SqlKata 及 SqlKata.Execution
- Code snippet
using System; using System.Data.SqlClient; using Dapper; using SqlKata; using SqlKata.Compilers; using SqlKata.Execution; namespace SqlKataLab { internal class Program { private static void Main(string[] args) { var conn = new SqlConnection(""); var db = new QueryFactory(conn, new SqlServerCompiler()); var compiler = new SqlServerCompiler(); // 語法產生編譯器 #region Insert // 方法 1. 產生 insert 語法 var query = db.Query(typeof(TempClass).Name).AsInsert(new TempClass { ID = 1, Value = "Test", CreatedDate = DateTime.Now }); Console.WriteLine(compiler.Compile(query)); // 方法 2. 與 Dapper 搭配新增資料 // 除使用強型別物件也可直接使用 dynamic var result = db.Query(typeof(TempClass).Name).Insert(new TempClass { ID = 1, Value = "Test", CreatedDate = DateTime.Now }); #endregion #region Read // 產生 Select 語法 query = new Query(typeof(TempClass).Name).Select("ID", "Value", "CreatedDate").Where("ID", 1); Console.WriteLine(compiler.Compile(query).Sql); conn.Query(compiler.Compile(query).Sql, compiler.Compile(query).NamedBindings); // 搭配 Dapper 進行 select #endregion #region Update // 產生 update 語法, 同理可參考 insert 直接搭配 Dapper 進行更新 query = new Query(typeof(TempClass).Name).Where("ID", 1).AsUpdate(new { AuthorId = 10 }); Console.WriteLine(compiler.Compile(query).Sql); #endregion #region Delete query = new Query(typeof(TempClass).Name).Where("ID", ">", 1).AsDelete(); Console.WriteLine(compiler.Compile(query).Sql); #endregion } } /// <summary> /// 資料表物件 /// </summary> public class TempClass { public int ID { get; set; } public string Value { get; set; } public DateTime CreatedDate { get; set; } } }