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
时间: 2024-08-27 21:33:48

EF执行存储过程并且返回DataSet的相关文章

[转]Entity FrameWork利用Database.SqlQuery&lt;T&gt;执行存储过程并返回参数

本文转自:http://www.cnblogs.com/xchit/p/3334782.html 目前,EF对存储过程的支持并不完善.存在以下问题:        EF不支持存储过程返回多表联合查询的结果集.        EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法支持返回部分字段的情况.        虽然可以正常导入返回标量值的存储过程,但是却没有为我们自动生成相应的实体.cs代码,我们还是无法在代码中直接调用或使用标量存储过程        EF不能直接支持存储过程中O

EF 调用存储过程、返回多结果集和OUTPUT参数 等问题

一.EF调用存储过程: 1.执行返回表类型的存储过程 先上存储过程 随手写的一个最简单的   .        Student.  Enrollment,Student   Enrollment.StudentIDStudent.StudentID  Enrollment.StudentID 执行存储过程的方法 是用直接执行sql的方式 我在我的文章第九篇 有过详细的介绍~大家可以先去看下 执行表的存储过程 其实是非常强大的 延迟加载 等都有体现 博客园的陆老师已经写了 写的非常清楚了~我这里就

Entity FrameWork利用Database.SqlQuery&lt;T&gt;执行存储过程并返回参数

2013-09-23 14:26 by xchit, 5084 阅读, 3 评论, 收藏, 编辑 目前,EF对存储过程的支持并不完善.存在以下问题: EF不支持存储过程返回多表联合查询的结果集. EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法支持返回部分字段的情况. 虽然可以正常导入返回标量值的存储过程,但是却没有为我们自动生成相应的实体.cs代码,我们还是无法在代码中直接调用或使用标量存储过程 EF不能直接支持存储过程中Output类型的参数. 其他一些问题. 今天我们利用EF

转:Entity FrameWork利用Database.SqlQuery&lt;T&gt;执行存储过程并返回参数

public IEnumerable<Statistic> GetStatistics(IEnumerable<Guid> itemIds) { var ctx = new DBContext(); return ctx.Database.SqlQuery<Statistic>("[dbo].[ItemStatisticsSelect] @Items, @IsPostModeration", new SqlParameter("Items&

EF执行存储过程返回DataSet

public static System.Collections.Generic.IEnumerable<TElement> RunSP<TElement>(this Database self, string spName, params SqlParameter[] paras) { System.Collections.Generic.IEnumerable<TElement> entityList = new System.Collections.Generic

EF执行存储过程

//执行strSql/procSql 69 //返回受影响的行数 70 int i = dbsql.Database.ExecuteSqlCommand("exec getActionUrlId @name", parameters); 71 72 List<ActionUrl> dd01 = dbsql.Database.SqlQuery(typeof(ActionUrl), "exec getActionUrlId @name", parameter

EF执行存储过程时超时问题

异常信息:Message = EF "Timeout 时间已到.在操作完成之前超时时间已过或服务器未响应." ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 360;

LINQ TO SQL 怎样 执行存储过程并返回存储过程的临时表

查了GOOGLE一下,这种办法可以解决 我的存储过程是这样的: CREATE procedure cal_month_dep_fast  @begdt datetime,@endt datetime as......... select  dep_no ,prod_no ,batch_no ,prod_add ,dep_date ,dep_num ,inv_num,lest_num ,buy_price from  #tempresult 在linq to sql可以通过以下办法解决 1 建个类

EF执行SQL语句和存储过程

EF虽然使用对象化的方式避免了我们写SQL,但是对于部分SQL,例如需要复杂的查询.执行插入和删除等可以操作,直接执行SQL可以减少减少性能上的损失. 使用EF执行SQL可以通过ExecuteSqlCommand()和SqlQuery()两个方法.这两个方法适用场景如下: ExecuteSqlCommand()不返回执行的结果,只返回受影响的行数,所以适用于数据库修改,数据创建,更新和删除等操作: SqlQuery()则会返回查询到的结果,并将结果保存在数据实体中: 使用ExecuteSqlCo