首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlDataReader.Read与SqlDataReader.NextResult的区别

SqlDataReader.Read与SqlDataReader.NextResult的区别
EN

Stack Overflow用户
提问于 2014-11-21 00:21:13
回答 2查看 26.2K关注 0票数 38

这两种方法的主要区别是什么?在msdn网站上,它的解释如下,但我不理解它。

Read将SqlDataReader前进到下一条记录。(覆盖DbDataReader.Read()。)

读取批处理Transact- NextResult语句的结果时,SQL使数据读取器前进到下一个结果。(覆盖dbDataReader.NextResult()。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-21 00:23:56

如果您的语句/过程返回多个结果集,例如,如果您在单个Command对象中有两个select语句,那么您将返回两个结果集。

  • NextResult用于在结果之间移动sets.
  • Read用于在单个结果集的记录中向前移动。

考虑以下示例:

如果你有一个proc,它的主体是:

代码语言:javascript
复制
.... Proc start

SELECT Name,Address FROM Table1

SELECT ID,Department FROM Table2

-- Proc End

执行上面的proc将产生两个结果集。一个用于Table1或第一个select语句,另一个用于下一个select语句。

默认情况下,第一个结果集可用于Read。如果您想移动到第二个结果集,您将需要NextResult

请参阅:Retrieving Data Using a DataReader

来自相同link的示例代码:使用NextResult检索多个结果集

代码语言:javascript
复制
static void RetrieveMultipleResults(SqlConnection connection)
{
    using (connection)
    {
        SqlCommand command = new SqlCommand(
          "SELECT CategoryID, CategoryName FROM dbo.Categories;" +
          "SELECT EmployeeID, LastName FROM dbo.Employees",
          connection);
        connection.Open();

        SqlDataReader reader = command.ExecuteReader();

        while (reader.HasRows)
        {
            Console.WriteLine("\t{0}\t{1}", reader.GetName(0),
                reader.GetName(1));

            while (reader.Read())
            {
                Console.WriteLine("\t{0}\t{1}", reader.GetInt32(0),
                    reader.GetString(1));
            }
            reader.NextResult();
        }
    }
}
票数 57
EN

Stack Overflow用户

发布于 2016-10-30 15:39:35

严格来说,这不是这个问题的答案,但如果您使用DataTable.Load方法而不是Reader.Read方法来使用读取器中的数据,请注意,在完成Load方法之后,读取器现在被放在下一个结果集的开头,因此您不应该调用NextResult方法,否则将跳过下一个结果集。

在这个场景中,只需围绕DataTable.Load调用在Reader.HasRows上执行一个简单的循环就可以处理潜在的多个结果集。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27044485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档