C# 从DataReader填充多个datatables。有可能吗?

C# 从DataReader填充多个datatables。有可能吗?,c#,asp.net,ado.net,datareader,C#,Asp.net,Ado.net,Datareader,我有一个存储过程,它返回我在DataReader中捕获的两个结果集 dr = returnData(Id,frmDate, toDate); dt1 = new DataTable(); dt2 = new DataTable(); dt1.Load(dr); dr.NextResult(); // Proceed to next resultset dt2.Load(dr); 数据表dt1已成功填充,但数据表dt2仍为空。 怎么做。有可能吗?DataReader在第一次使用时会被销毁吗?

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

dr = returnData(Id,frmDate, toDate);

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

dt1.Load(dr);
dr.NextResult(); // Proceed to next resultset
dt2.Load(dr);
数据表dt1已成功填充,但数据表dt2仍为空。
怎么做。有可能吗?DataReader在第一次使用时会被销毁吗?

这是一个很老的问题,但万一有人发现了这个问题。。。在中找到答案,如果使用
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);
}
ds=新数据集();
ds.表。添加(“表1”);
ds.表[0]。加载(读卡器);
对于(int ii=1;ii
这是一个很老的问题,但万一有人发现了。。。在中找到答案,如果使用
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);
}
ds=新数据集();
ds.表。添加(“表1”);
ds.表[0]。加载(读卡器);
对于(int ii=1;ii
NextResult()
应该可以做到这一点。您是否可以向我们显示正在调用的存储过程?存储过程正在成功返回两个结果集,我已通过直接在Sql Server Management Studio上执行进行了检查。
NextResult
是否实际返回
true
?您显示的代码忽略了返回值。@Jonsket ok,因此我使用
if(dr.NextResult())
进行了检查。返回值为false。即使有两个结果,我也编辑了您的标题。请参见“”,其中的共识是“不,他们不应该”。
NextResult()
应该可以做到这一点。您是否可以向我们显示正在调用的存储过程?存储过程正在成功返回两个结果集,我已通过直接在Sql Server Management Studio上执行进行了检查。
NextResult
是否实际返回
true
?您显示的代码忽略了返回值。@Jonsket ok,因此我使用
if(dr.NextResult())
进行了检查。返回值为false。即使有两个结果,我也编辑了您的标题。请参阅“”,其中的共识是“不,他们不应该”。