SqlDataReader.Read和SqlDataReader.NextResult之间的区别

Ozk*_*kan 34 c# sql ado.net

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

Read将SqlDataReader推进到下一条记录.(重写DbDataReader.Read().)

NextResult在读取批处理Transact-SQL语句的结果时,将数据读取器推进到下一个结果.(重写dbDataReader.NextResult().)

Hab*_*bib 48

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

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

请考虑以下示例:

如果你有一个主体如下的过程:

.... Proc start

SELECT Name,Address FROM Table1

SELECT ID,Department FROM Table2

-- Proc End
Run Code Online (Sandbox Code Playgroud)

执行上述proc将产生两个结果集.一个for Table1或first select语句,另一个用于下一个select语句.

默认情况下,第一个结果集可用Read.如果要移动到第二个结果集,则需要NextResult.

请参阅:使用DataReader检索数据

来自同一链接的示例代码:使用NextResult检索多个结果集

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)