You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Devforce 2012存储过程返回多结果集至报表的实现疑问

解决DevForce 2012存储过程多结果集返回问题

嘿,没问题!DevForce 2012完全支持从存储过程获取多结果集,只是默认通过EDM添加的存储过程生成的方法只会返回第一个结果集而已,咱们手动处理一下就能拿到所有结果~

下面是具体的实现步骤,不管你是要绑定到关联实体还是DataSet都适用:

方法一:映射到实体类

如果你想把结果集映射到EDM里的实体类型,可以这么做:

  1. 先创建存储过程的命令对象,并配置参数(如果有的话):
// 假设你的EntityManager实例叫em
var cmd = em.Connection.CreateCommand();
cmd.CommandText = "你的存储过程名称";
cmd.CommandType = System.Data.CommandType.StoredProcedure;

// 给存储过程加参数(如果需要的话)
// cmd.Parameters.Add(new SqlParameter("@你的参数名", 参数值));
  1. 打开连接并执行命令,用Translate方法逐个读取结果集:
if (em.Connection.State != System.Data.ConnectionState.Open)
{
    em.Connection.Open();
}

using (var reader = cmd.ExecuteReader())
{
    // 读取第一个结果集,映射到对应实体
    var firstEntityList = em.Translate<你的第一个实体类型>(reader).ToList();
    
    // 切换到第二个结果集
    reader.NextResult();
    
    // 读取第二个结果集,映射到第二个实体
    var secondEntityList = em.Translate<你的第二个实体类型>(reader).ToList();
    
    // 如果还有更多结果集,重复调用NextResult()和Translate()即可
}

方法二:填充到DataSet

如果需要把结果集放到DataSet里绑定报表,直接用DataSet.Load更方便:

var dataSet = new DataSet();
var cmd = em.Connection.CreateCommand();
cmd.CommandText = "你的存储过程名称";
cmd.CommandType = System.Data.CommandType.StoredProcedure;

if (em.Connection.State != System.Data.ConnectionState.Open)
{
    em.Connection.Open();
}

using (var reader = cmd.ExecuteReader())
{
    // 把所有结果集加载到DataSet,指定表名
    dataSet.Load(reader, System.Data.LoadOption.OverwriteChanges, "表1", "表2", "表3");
}
// 现在dataSet里就有所有结果集对应的DataTable了,直接绑定报表就行

为什么EDM自动生成的方法只返回第一个结果?

因为EDM导入存储过程时,默认只会检测并映射第一个结果集的结构,生成的函数导入也就只会返回这一个结果。所以要获取多结果集,必须手动用DbDataReader来处理~

内容的提问来源于stack exchange,提问作者MikeyT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:50:59