Leer en inglés

Compartir a través de


IDataReader.NextResult Método

Definición

Importante

Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.

Hace avanzar el lector de datos hasta el resultado siguiente, cuando se leen los resultados instrucciones SQL por lotes.

C#
public bool NextResult();

Devoluciones

true si hay más filas; de lo contrario, false.

Comentarios

Se usa para procesar varios resultados, que se pueden obtener mediante la ejecución de instrucciones SQL por lotes.

De forma predeterminada, el lector de datos se coloca en el primer resultado.

C#
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Data.Odbc;

class Program
{
    static void Main(string[] args)
    {
        string connectionTypeName = "OleDb";
        string connectionString = @"Provider=SQLNCLI11;Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=SSPI";

        using (IDbConnection connection = DatabaseConnectionFactory.GetConnection(connectionTypeName, connectionString))
        {
            IDbCommand command = connection.CreateCommand();
            command.Connection = connection;

            // these 2 queries are executed as a single batch and return 2 separate results
            command.CommandText = "SELECT CountryRegionCode, Name FROM Person.CountryRegion;" + "SELECT CountryRegionCode, StateProvinceCode, Name, StateProvinceID FROM Person.StateProvince;";

            connection.Open();

            using (IDataReader reader = command.ExecuteReader())
            {

                // process the first result
                displayCountryRegions(reader);

                // use NextResult to move to the second result and verify it is returned
                if (!reader.NextResult())
                    throw new InvalidOperationException("Expected second result (StateProvinces) but only one was returned");

                // process the second result
                displayStateProvinces(reader);

                reader.Close();
            }

            connection.Close();
        }
    }

    static void displayCountryRegions(IDataReader reader)
    {
        if (reader.FieldCount != 2)
            throw new InvalidOperationException("First resultset (CountryRegions) must contain exactly 2 columns");

        while (reader.Read())
        {
            Console.WriteLine("CountryRegionCode={0}, Name={1}"
                , reader.GetString(reader.GetOrdinal("CountryRegionCode"))
                , reader.GetString(reader.GetOrdinal("Name")));
        }
    }

    static void displayStateProvinces(IDataReader reader)
    {
        if (reader.FieldCount != 4)
            throw new InvalidOperationException("Second resultset (StateProvinces) must contain exactly 4 columns");

        while (reader.Read())
        {
            Console.WriteLine("CountryRegionCode={0}, StateProvinceCode={1}, Name={2}, StateProvinceID={3}"
                , reader.GetString(reader.GetOrdinal("CountryRegionCode"))
                , reader.GetString(reader.GetOrdinal("StateProvinceCode"))
                , reader.GetString(reader.GetOrdinal("Name"))
                , reader.GetInt32(reader.GetOrdinal("StateProvinceID")));
        }
    }

    class DatabaseConnectionFactory
    {
        static SqlConnection GetSqlConnection(string connectionString)
        {
            return new SqlConnection(connectionString);
        }

        static OdbcConnection GetOdbcConnection(string connectionString)
        {
            return new OdbcConnection(connectionString);
        }

        static OleDbConnection GetOleDbConnection(string connectionString)
        {
            return new OleDbConnection(connectionString);
        }

        public static IDbConnection GetConnection(string connectionTypeName, string connectionString)
        {
            switch (connectionTypeName)
            {
                case "SqlClient":
                    return GetSqlConnection(connectionString);
                case "Odbc":
                    return GetOdbcConnection(connectionString);
                case "OleDb":
                    return GetOleDbConnection(connectionString);
                default:
                    throw new ArgumentException("Value must be SqlClient, Odbc, or OleDb", "connectionTypeName");
            }
        }
    }
}

Se aplica a

Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1