IDataReader.NextResult Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Při čtení výsledků dávkových příkazů SQL posune čtečku dat k dalšímu výsledku.
public:
bool NextResult();
public bool NextResult ();
abstract member NextResult : unit -> bool
Public Function NextResult () As Boolean
Návraty
true
pokud je více řádků; v opačném případě . false
Poznámky
Slouží ke zpracování více výsledků, které lze získat spuštěním dávkových příkazů SQL.
Ve výchozím nastavení je čtečka dat umístěna na prvním výsledku.
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");
}
}
}
}
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.OleDb
Imports System.Data.Odbc
Module Module1
Dim connectionTypeName As String = "SqlClient"
Dim connectionString As String = "Data Source=(local);Initial Catalog=AdventureWorks2012;Integrated Security=SSPI"
Sub Main()
Using connection As IDbConnection = DatabaseConnectionFactory.GetConnection(connectionTypeName, connectionString)
Dim command As IDbCommand = 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 reader As IDataReader = command.ExecuteReader()
'process the first result
displayCountryRegions(reader)
'use NextResult to move to the second result and verify it is returned
If Not reader.NextResult() Then
Throw New InvalidOperationException("Expected second result (StateProvinces) but only one was returned")
End If
'process the second result
displayStateProvinces(reader)
reader.Close()
End Using
connection.Close()
End Using
End Sub
Sub displayCountryRegions(reader As IDataReader)
If Not reader.FieldCount = 2 Then
Throw New InvalidOperationException("First resultset (CountryRegions) must contain exactly 2 columns")
End If
While reader.Read()
Console.WriteLine("CountryRegionCode={0}, Name={1}" _
, reader.GetString(reader.GetOrdinal("CountryRegionCode")) _
, reader.GetString(reader.GetOrdinal("Name")))
End While
End Sub
Sub displayStateProvinces(reader As IDataReader)
If Not reader.FieldCount = 4 Then
Throw New InvalidOperationException("Second resultset (StateProvinces) must contain exactly 4 columns")
End If
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")))
End While
End Sub
Class DatabaseConnectionFactory
Shared Function GetSqlConnection(connectionString As String) As SqlConnection
Return New SqlConnection(connectionString)
End Function
Shared Function GetOdbcConnection(connectionString As String) As OdbcConnection
Return New OdbcConnection(connectionString)
End Function
Shared Function GetOleDbConnection(connectionString As String) As OleDbConnection
Return New OleDbConnection(connectionString)
End Function
Public Shared Function GetConnection(connectionTypeName As String, connectionString As String) As IDbConnection
Select Case connectionTypeName
Case "SqlClient"
Return GetSqlConnection(connectionString)
Case "Odbc"
Return GetOdbcConnection(connectionString)
Case "OleDb"
Return GetOleDbConnection(connectionString)
Case Else
Throw New ArgumentException("Value must be SqlClient, Odbc or OleDb", "connectionTypeName")
End Select
End Function
End Class
End Module
Platí pro
Spolupracujte s námi na GitHubu
Zdroj tohoto obsahu najdete na GitHubu, kde můžete také vytvářet a kontrolovat problémy a žádosti o přijetí změn. Další informace najdete v našem průvodci pro přispěvatele.