zoukankan      html  css  js  c++  java
  • DbContext-扩展方法-支持存储过程

    一、方法封装

      public static  class DbContextExtension
        {
            public static List<T> GetList<T>(this DbContext db, string sql, CommandType type=CommandType.Text, params DbParameter[] parameters)
            {
                try
                {
                    using (DbConnection conn = db.Database.Connection)
                    {
                        if (conn.State == ConnectionState.Closed)
                        {
                            conn.Open();
                        }
                        using (DbCommand cmd = conn.CreateCommand())
                        {
                            cmd.CommandText = sql;
                            cmd.CommandType = type;
                            cmd.Parameters.AddRange(parameters);
                            DataTable dt = new DataTable();
                            using (DbDataReader reader = cmd.ExecuteReader())
                            {
                                dt.Load(reader);
                            }
                            cmd.Parameters.Clear();
                            string json = dt.ToJson();
                            List<T> list = json.ToObject<List<T>>();
                            return list;
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }

    二、方法调用

              int code = 0;
                    SqlParameter[] param = { 
                        new SqlParameter("@year",year),
                        new SqlParameter("@userId",userId),
                        new SqlParameter("@code ",code){ Direction=ParameterDirection.Output}
                    };
                    List<EChartsDto<int>> data = new List<EChartsDto<int>>();
    
                    data = db.GetList<EChartsDto<int>>("[dbo].[proc_getRecordsByUser]", CommandType.StoredProcedure, param);

     三、其他版本

     public static class DbContextExtensions
      {
        public static IEnumerable<TElement> ExecuteProc<TElement>(this DbContext db, string sql, params object[] parameters) where TElement : new()
        {
          var connection = db.Database.GetDbConnection();
          using (var cmd = connection.CreateCommand())
          {
            db.Database.OpenConnection();
            cmd.CommandText = sql;
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.AddRange(parameters);
            var dr = cmd.ExecuteReader();
            var columnSchema = dr.GetColumnSchema();
            var data = new List<TElement>();
            while (dr.Read())
            {
              TElement item = new TElement();
              Type type = item.GetType();
              foreach (var kv in columnSchema)
              {
                var propertyInfo = type.GetProperty(kv.ColumnName);
                if (kv.ColumnOrdinal.HasValue && propertyInfo != null)
                {
                  var value = dr.IsDBNull(kv.ColumnOrdinal.Value)
                      ? null
                      : dr.GetValue(kv.ColumnOrdinal.Value);
                  if (value != null
                  && propertyInfo.PropertyType != typeof(int)
                  && propertyInfo.PropertyType != typeof(double))
                  {
                    value = value.ToString();
                  }
                  propertyInfo.SetValue(item, value);
                }
              }
              data.Add(item);
            }
            dr.Dispose();
            return data;
          }
        }
    
    
    
        public static DataTable ExecuteProc(this DbContext db, string sql, params object[] parameters)
        {
          DataTable dt = new DataTable();
          var connection = db.Database.GetDbConnection();
          using (var cmd = connection.CreateCommand())
          {
            db.Database.OpenConnection();
            cmd.CommandText = sql;
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.AddRange(parameters);
            SqlDataAdapter sda = new SqlDataAdapter((SqlCommand)cmd);
            sda.Fill(dt);
            return dt;
          }
        }
    
    
      }
  • 相关阅读:
    Myeclipse安装svn插件
    Hudson+Maven+Svn搭建持续集成环境
    svn merge和branch分析
    Linux下安装subversion1.6.5和apache2
    C语言中,为什么字符串可以赋值给字符指针变量
    Loadrunner C 编程_1
    oracle解决多表关联分组查询问题
    学习英语
    使用 JMeter 完成常用的压力测试 [转]
    Jmeter零起点学习
  • 原文地址:https://www.cnblogs.com/ABC-wangyuhan/p/14679641.html
Copyright © 2011-2022 走看看