SqlKata - 方便好用的 Sql query builder

c# 快速產生 sql query 的一大利器, 可搭配 dapper 使用, 並支援多資料庫(Sql, MySQL, etc)

去年在開發專案時無意間找到的一個 Sql Builder 的套件, 當時此套件還在開發階段(v0.x), 尚未上到 Nuget 時便覺得此套件的發展潛力無窮.  目前以正式發行上 Nuget 供開發人員使用(目前版本: v1.1). 在搭配 Dapper 有種如虎添翼的感覺, 大幅減少程式內撰寫 sql 的可能性.  以下簡單操作 SqlKata 的 CRUD 供開發人員參考(SqlKata 支援更多的語法產生, 詳細操作可參考官網文件: https://sqlkata.com/docs/)

  1. 在 Nuget 上安裝 SqlKata 及 SqlKata.Execution 
  2. 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; }
        }
    }

     

Done, enjoy it!