• 超简DbHelper


    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Dynamic;
    
    namespace ConsoleApplication1 {
        public class QuickDB {
            static void Main() {
                var sql = "select * from Categories";
                var connectionString = @"Data Source=(localdb)MSSQLLocalDB;Initial Catalog=Northwind;";
                var list = new QuickDB(connectionString).ExecuteReader(sql);
                for (int i = 0; i < list.Length; i++) {
                    var item = list[i];
                    Console.WriteLine(item.CategoryName);
                }
                Console.ReadLine();
            }
    
            private string connectionString;
            public QuickDB(string connectionString) {
                this.connectionString = connectionString;
            }
    
            private void command(string sql, Action<SqlCommand> act) {
                var c = new SqlConnection(connectionString);
                c.Open();
                var comm = c.CreateCommand();
                comm.CommandText = sql;
                act(comm);
                c.Close();
            }
    
            private T command<T>(string sql, Func<SqlCommand, T> func) {
                T t = default(T);
                command(sql, c => { t = func(c); });
                return t;
            }
    
            public int ExecuteNonQuery(string sql) {
                return command(sql, c => {
                    return c.ExecuteNonQuery();
                });
            }
    
            public object ExecuteScalar(string sql) {
                var r = ExecuteReader(sql);
                return r.Length == 0 ? null : r[0][0];
            }
    
            public dynamic[] ExecuteReader(string sql) {
                return command(sql, c => {
                    var q = c.ExecuteReader();
                    var r = new List<dynamic>();//will return this.
                    var ns = new List<string>();//column names
                    while (q.Read()) {
                        if (ns.Count == 0) {
                            for (int i = 0; i < q.FieldCount; i++) {
                                ns.Add(q.GetName(i));
                            }
                            ns.Sort();
                        }
                        IDictionary<string, object> obj = new ExpandoObject();//same to javascript object
                        foreach (var n in ns) {
                            obj.Add(n, q[n]);
                        }
                        r.Add(obj);
                    }
                    q.Close();
                    return r.ToArray();
                });
            }
        }
    }
  • 相关阅读:
    在线课程的总结
    数据库相关整理
    两个栈实现队列&两个栈实现队列
    Django中间件的5种自定义方法
    Python Web开发之路
    内置函数——format
    Django组件拾忆
    支付宝支付流程
    消息队列之RabbitMQ
    WebSocket
  • 原文地址:https://www.cnblogs.com/ly45/p/6279186.html
Copyright © 2020-2023  润新知