我通常使用DataSet,因为它非常灵活。最近,我被分配了代码优化任务,为减少对数据库的访问,我在一个过程中更改了两个查询。一个查询返回count,另一个查询返回actual data。即,我的stored procedure返回两个表。现在,我知道如何使用DataSets读取两个表,但是我需要使用DataReader读取两个表。为此,我找到了This

我按照这篇文章写了这样的代码:

dr = cmd.ExecuteReader();
while (dr.Read())
{


}
if (dr.NextResult()) // this line throws exception
{
   while (dr.Read())
{

但是我在dt.NextResult遇到了异常。异常(exception)是:
Invalid attempt to call NextResult when reader is closed.

我还在google上面搜索了error,但是仍然无法解决问题。
任何帮助都感激不尽。我需要使用datareader读取多个表,这可能吗?

最佳答案

尝试执行此操作,因为一旦任务结束,这将关闭连接,数据读取器和命令,因此不会给datareader关闭异常

还要像if(reader.NextResult())这样检查以检查是否有下一个结果,

using (SqlConnection connection = new SqlConnection("connection string here"))
{
    using (SqlCommand command = new SqlCommand
           ("SELECT Column1 FROM Table1; SELECT Column2 FROM Table2", connection))
    {
        connection.Open();
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                MessageBox.Show(reader.GetString(0), "Table1.Column1");
            }

            if(reader.NextResult())
            {
               while (reader.Read())
              {
                MessageBox.Show(reader.GetString(0), "Table2.Column2");
              }
            }
        }
    }
}

关于c# - DataReader中的倍数表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12969318/

10-12 23:26