Export (0) Print
Expand All

IDataReader.NextResult Method

Advances the data reader to the next result, when reading the results of batch SQL statements.

Namespace:  System.Data
Assembly:  System.Data (in System.Data.dll)

bool NextResult()

Return Value

Type: System.Boolean
true if there are more rows; otherwise, false.

Used to process multiple results, which can be obtained by executing batch SQL statements.

By default, the data reader is positioned on the first result.

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 = "SqlClient";
      // string connectionString = @"Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=SSPI";

      // string connectionTypeName = "Odbc";
      // string connectionString = @"Driver={SQL Server Native Client 11.0};Server=(local);Database=AdventureWorks2012;Trusted_Connection=Yes";

      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");
         }
      }
   }
}

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft