Ответ 1
Если ваш оператор /proc возвращает несколько наборов результатов, например, если у вас есть два оператора select
в одном объекте Command
, вы получите два набора результатов.
-
NextResult
используется для перемещения между наборами результатов. -
Read
используется для перемещения вперед в записях одного набора результатов.
Рассмотрим следующий пример:
Если у вас есть proc, основной корпус которого похож:
.... Proc start
SELECT Name,Address FROM Table1
SELECT ID,Department FROM Table2
-- Proc End
Выполнение вышеуказанного proc приведет к созданию двух наборов результатов. Один для Table1
или первый оператор select и другой для следующего оператора select
.
По умолчанию первый набор результатов будет доступен для Read
. Если вы хотите перейти ко второму набору результатов, вам понадобится NextResult
.
Смотрите: Извлечение данных с помощью DataReader
Пример кода из той же link: Извлечение множества наборов результатов с помощью 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();
}
}
}