【问题标题】:Populate multiple datatables from DataReader. Is it even possible?从 DataReader 填充多个数据表。甚至可能吗?
【发布时间】:2013-10-14 05:36:39
【问题描述】:

我有一个存储过程,它返回我在 DataReader 中捕获的两个结果集。

dr = returnData(Id,frmDate, toDate);

dt1 = new DataTable();
dt2 = new DataTable();

dt1.Load(dr);
dr.NextResult(); // Proceed to next resultset
dt2.Load(dr);

DataTable dt1 已成功填充,但 DataTable dt2 仍为空。 怎么做。甚至可能吗? DataReader 在第一次使用时会被销毁吗?

【问题讨论】:

  • NextResult() 应该可以解决问题。你能告诉我们正在调用的 SPROC 吗?
  • 存储过程成功返回两个结果集,我已经通过直接在Sql Server Management Studio上执行来检查。
  • NextResult 是否真的返回 true?您显示的代码忽略了返回值。
  • @JonSkeet 好的,所以我检查了if(dr.NextResult())...它返回 false..即使有两个结果集
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。

标签: c# asp.net ado.net datareader


【解决方案1】:

非常老的问题,但万一其他人偶然发现这个...在this SO answer: 找到答案如果您使用DataTable.Load(),那么您不应该使用rdr.NextResult(),因为这是隐含的。只需致电.Load() 即可预订下一张餐桌。因此,例如,如果您有一个expectedTableCount

ds = new DataSet();
ds.Tables.Add("Table1");
ds.Tables[0].Load(reader);
for (int ii = 1; ii < expectedTableCount; ii++)
{
    ds.Tables.Add("Table" + (ii + 1));
    ds.Tables[ii].Load(reader);
}

【讨论】:

    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 2012-05-28
    • 2021-11-20
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多