惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
Jina AI
Jina AI
I
InfoQ
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
博客园 - 三生石上(FineUI控件)
G
Google Developers Blog
V
Visual Studio Blog
L
LangChain Blog
WordPress大学
WordPress大学
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Tor Project blog
GbyAI
GbyAI
MongoDB | Blog
MongoDB | Blog
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
Recorded Future
Recorded Future
N
News and Events Feed by Topic
云风的 BLOG
云风的 BLOG
Martin Fowler
Martin Fowler
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
O
OpenAI News
Google DeepMind News
Google DeepMind News
S
Schneier on Security
C
Check Point Blog
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
aimingoo的专栏
aimingoo的专栏
TaoSecurity Blog
TaoSecurity Blog
T
Tenable Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Hugging Face - Blog
Hugging Face - Blog
Cyberwarzone
Cyberwarzone
月光博客
月光博客
The Last Watchdog
The Last Watchdog
B
Blog
有赞技术团队
有赞技术团队
Blog — PlanetScale
Blog — PlanetScale
T
Tailwind CSS Blog
Hacker News: Ask HN
Hacker News: Ask HN
H
Heimdal Security Blog
美团技术团队

博客园 - 强悍的抽屉

WebAPI 操作返回 c#版 mqtt 3.1.1 client 实现 mqtt 协议之 PINGREQ, PINGRESP httpWebRequest 文件下载 一个 go 文件服务器 ssdb MongoDB 刷新几次就报错 C# Win32API - 强悍的抽屉 - 博客园 回车跳转控件焦点 让程序只启动一次 -- Mutex C# 排序 WINDEF.h 变量类型 SqlHelper 数据库操作类2 SqlHelper 数据库操作类 第一个 Windows 应用程序 JavaScript 字符串处理函数 - 强悍的抽屉 - 博客园 JavaScript 字符串函数扩充 - 强悍的抽屉 - 博客园 C# 字符串处理一些方法 希望找人一起写个 Ajax 的封装 几种流行的JS框架的选择
基于 Dapper 的一个 DbUtils
强悍的抽屉 · 2017-01-11 · via 博客园 - 强悍的抽屉
    /// <summary>
    /// v1.0
    /// </summary>
    public partial class DbUtils
    {
        string ConnectionString;
        /// <summary>
        /// 
        /// </summary>
        /// <param name="dbName"></param>
        public DbUtils(string dbName)
        {
            ConnectionString = $"server=.;database={dbName};uid=;pwd=;";
        }

        IDbConnection OpenConnection()
        { 
            var conn = new NpgsqlConnection(ConnectionString);
            conn.Open();
            return conn;
        }

        public int Execute(string sql, object param = null, IDbTransaction transaction = null)
        {
            using (var conn = OpenConnection())
            {
                var result = conn.Execute(sql, param, transaction);
                conn.Close();
                conn.Dispose();
                return result;
            }
        }

        public T ExecuteScalar<T>(string sql, object param = null, IDbTransaction transaction = null)
        {
            using (var conn = OpenConnection())
            {
                var result = conn.ExecuteScalar<T>(sql, param, transaction);
                conn.Close();
                conn.Dispose();
                return result;
            }
        }

        public IEnumerable<T> Query<T>(string sql, object param = null, IDbTransaction transaction = null)
        {
            using (var conn = OpenConnection())
            {
                var result = conn.Query<T>(sql, param, transaction);
                conn.Close();
                conn.Dispose();
                return result;
            }
        }

        public IEnumerable<T> Query<T>(string sql, int page, int limit, object param = null, IDbTransaction transaction = null)
        {
            int offset = (page - 1) * limit;
            sql += $" limit {limit} offset {offset}";
            return Query<T>(sql, param);
        }

        public T QueryFirst<T>(string sql, object param = null, IDbTransaction transaction = null)
        {
            using (var conn = OpenConnection())
            {
                var result = conn.QueryFirst<T>(sql, param, transaction);
                conn.Close();
                conn.Dispose();
                return result;
            }
        }

        public T QueryFirstOrDefault<T>(string sql, object param = null, IDbTransaction transaction = null)
        {
            using (var conn = OpenConnection())
            {
                var result = conn.QueryFirstOrDefault<T>(sql, param, transaction);
                conn.Close();
                conn.Dispose();
                return result;
            }
        }

        //public static T QueryMultiple<T>(string sql, object param = null, IDbTransaction transaction = null)
        //{
        //    using (var conn = OpenConnection())
        //    {
        //        var result = conn.QueryMultiple(sql, param, transaction);
        //        conn.Close();
        //        conn.Dispose();
        //        return result;
        //    }
        //}

        public async Task<int> ExecuteAsync(string sql, object param = null, IDbTransaction transaction = null)
        {
            using (var conn = OpenConnection())
            {
                var result = await conn.ExecuteAsync(sql, param, transaction);
                conn.Close();
                conn.Dispose();
                return result;
            }
        }

        public async Task<T> ExecuteScalarAsync<T>(string sql, object param = null, IDbTransaction transaction = null)
        {
            using (var conn = OpenConnection())
            {
                var result = await conn.ExecuteScalarAsync<T>(sql, param, transaction);
                conn.Close();
                conn.Dispose();
                return result;
            }
        }

        public async Task<IEnumerable<T>> QueryAsync<T>(string sql, object param = null, IDbTransaction transaction = null)
        {
            using (var conn = OpenConnection())
            {
                var result = await conn.QueryAsync<T>(sql, param, transaction);
                conn.Close();
                conn.Dispose();
                return result;
            }
        }

        public async Task<IEnumerable<T>> QueryAsync<T>(string sql, int page, int limit, object param = null, IDbTransaction transaction = null)
        {
            int offset = (page - 1) * limit;
            sql += $" limit {limit} offset {offset}";
            return await QueryAsync<T>(sql, param);
        }

        public async Task<T> QueryFirstAsync<T>(string sql, object param = null, IDbTransaction transaction = null)
        {
            using (var conn = OpenConnection())
            {
                var result = await conn.QueryFirstAsync<T>(sql, param, transaction);
                conn.Close();
                conn.Dispose();
                return result;
            }
        }

        public async Task<T> QueryFirstOrDefaultAsync<T>(string sql, object param = null, IDbTransaction transaction = null)
        {
            using (var conn = OpenConnection())
            {
                var result = await conn.QueryFirstOrDefaultAsync<T>(sql, param, transaction);
                conn.Close();
                conn.Dispose();
                return result;
            }
        }
    }
    /// <summary>
    /// 
    /// </summary>
    public partial class DbUtils
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="table"></param>
        /// <param name="fields"></param>
        /// <returns></returns>
        public static string GetInsertSQL(string table, string fields)
        {
            return $"INSERT INTO {table}({fields}) VALUES ({GetInsertFields(fields)});";
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="table"></param>
        /// <param name="fields"></param>
        /// <returns></returns>
        public static string GetInsertSQLReturnId(string table, string fields)
        {
            return $"INSERT INTO {table}({fields}) VALUES ({GetInsertFields(fields)}) RETURNING Id;";
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="talbe"></param>
        /// <param name="fields"></param>
        /// <returns></returns>
        public static string GetUpdateSQL(string talbe, string fields)
        {
            return $"UPDATE {talbe} SET {GetUpdateFields(fields)} where id=@id";
        }

        static string GetInsertFields(string value)
        {
            var result = value.Split(new[] { ',', ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            var fields = string.Join(",@", result);
            return "@" + fields;
        }

        static string GetUpdateFields(string value)
        {
            var collection = value.Split(new[] { ',', ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

            var sb = new StringBuilder();
            foreach (var item in collection)
            {
                sb.Append(item);
                sb.Append("=@");
                sb.Append(item);
                sb.Append(",");
            }

            if (sb.Length > 1)
                sb.Remove(sb.Length - 1, 1);

            return sb.ToString();
        }
    }