EF执行存储过程并且返回DataSet

Posted 秋明小司机丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF执行存储过程并且返回DataSet相关的知识,希望对你有一定的参考价值。

个人想到的办法是,EF实质也是Ado那一套进化而来,所以想着肯定会有点联系。翻阅官方文档之后

看到一句解释:db.Database.Connection 返回上下文使用的链接。然后接着断点调试发现返回的就是 webcofing 里面的

<connectionStrings>连接数据库配置</connectionStrings>

so~

照搬Ado完事,代码如下:

 #region 获取DataSet返回结构集
        public DataSet GetDataSet(string sql, params SqlParameter[] para)
        {
            List<string> sql2 = new List<string>();
            for (int i = 0; i < para.Length; i++)
            {
                SqlParameter p = para[i];
                sql2.Add(p.ParameterName);
            }
            DataSet sd = new DataSet();
            using (var db = new BaseContext())
            {
                SqlConnection conn = db.Database.Connection as SqlConnection;
                using (SqlCommand cmd = new SqlCommand(sql + " " + string.Join(",", sql2.ToArray()), conn))
                {
                    cmd.Parameters.AddRange(para);
                    SqlDataAdapter sda = new SqlDataAdapter(cmd);
                    sda.Fill(sd);
                }
            }
            return sd;
        }
        #endregion

        #region 获取Table返回DataTable
        public DataTable GetDataTable(string sql, params SqlParameter[] para)
        {
            DataTable dt = new DataTable();
            List<string> sql2 = new List<string>();

            for (int i = 0; i < para.Length; i++)
            {
                SqlParameter p = para[i];
                sql2.Add(p.ParameterName);
            }

            using (var db = new BaseContext())
            {
                SqlConnection conn = db.Database.Connection as SqlConnection;
                using (SqlCommand cmd = new SqlCommand(sql + " " + string.Join(",", sql2.ToArray()), conn))
                {
                    cmd.Parameters.AddRange(para);
                    SqlDataAdapter sda = new SqlDataAdapter(cmd);
                    sda.Fill(dt);
                    return dt;
                }
            }
        }
        #endregion

        #region DataTable 转换 
        public static List<Dictionary<string, object>> GetEntity(DataTable dt)
        {
            //返回json 需要引用json.net/Newtonsoft.Json 这两个其中一个dll
            string json = JsonConvert.SerializeObject(dt);

            List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
            //表示数据量大于0
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (dt.Columns.Count > 0)
                    {

                        Dictionary<string, object> row = new Dictionary<string, object>();
                        ///获取所有列名 item.ColumnsName
                        foreach (DataColumn item in dt.Columns)
                        {
                            row.Add(item.ColumnName, dt.Rows[i][item.ColumnName]);
                        }
                        rows.Add(row);
                    }
                }
            }
            return rows;
        } 
        #endregion

 

以上是关于EF执行存储过程并且返回DataSet的主要内容,如果未能解决你的问题,请参考以下文章

oracle 存储过程执行动态SQL 返回结果给游标,外部程序获得dataset结果集。

关于EF执行返回表的存储过程

sql存储过程,根据多个条件查询,返回一个dataTable或者DataSet

动态存储过程和 EF4.1

EF执行SQL语句和存储过程

C#,EF中执行存储过程返回一个ObjectResult对象,这个对象是延迟加载的吗?