【发布时间】:2012-10-09 18:38:50
【问题描述】:
我通常使用DataSet,因为它非常灵活。最近我被分配了代码优化任务,为了减少对数据库的命中,我在一个过程中更改了两个查询。一个查询返回count,另一个返回actual data。也就是说,My stored procedure 返回两个表。现在,我知道如何使用DataSets 读取这两个表,但我需要使用DataReader 读取这两个表。在搜索过程中,我找到了This。
我按照文章写了这样的代码:
dr = cmd.ExecuteReader();
while (dr.Read())
{
}
if (dr.NextResult()) // this line throws exception
{
while (dr.Read())
{
但我在 dt.NextResult 遇到异常。例外是:
Invalid attempt to call NextResult when reader is closed.
我也搜索了上面的错误,但仍然无法解决问题。
任何帮助都感激不尽。我需要使用datareader 读取多个表,这可能吗?
【问题讨论】:
-
我不明白的是:"一个Query返回计数,另一个返回实际数据。也就是说,我的存储过程返回两个表" count(这是一个标量值)一个表?
-
是的,它是标量值,但存储过程是使用动态查询编写的。两个查询都非常大,查询都写为 varchar,然后最后使用 Exec 执行。如果我将 Count 查询称为实际数据查询的子查询,则查询变量的大小非常大,并且执行时出错。所以为了避免这种情况,我写了两个不同的查询,这就是 Count 也来自一个表(第二个表)的原因。我希望我说清楚了。
标签: c# asp.net .net sqldatareader datareader