Как обрабатывать несколько наборов результатов, каждый с несколькими строками? Объекта IDataReader.NextResult () окончание чтения()
Как обрабатывать несколько наборов результатов, каждый с несколькими строками? Вызов NextResult () разрывает цикл while.
некоторые из моих SPs возвращают несколько наборов результатов. Я обрабатываю их с помощью NextResult (), но когда я это делаю, и мой SP имеет только один ResultSet, я вижу, что цикл while с Read () заканчивает оставлять меня только с первой строкой.
без вызова NextResult() я получаю все строки для первого набора результатов, но, конечно, второй и последующие наборы результатов не обрабатывать?
using (IDataReader reader = storedProcedure.ExecuteReader(CommandBehavior.CloseConnection, parameterNames as string[], arguments))
{
while (reader.Read())
{
ArrayList row = new ArrayList();
for (int j = 0; j < reader.FieldCount; ++j)
{
object rowValue = reader.GetValue(j);
row.Add(rowValue);
}
reader.NextResult();//next resultset, breaks out of the while
}
}
1 ответов
вам нужно создать два вложенных цикла.
- внешний цикл должен повторяться над результирующими наборами и должен иметь
NextResult
в конце - внутренний цикл должен перебирать строки в результирующем наборе и должен иметь
Read
в начале.
что-то типа:
using (IDataReader reader = ...) {
// Process all result sets
do {
// Process all elements in the current result set
while (reader.Read()) {
ArrayList row = new ArrayList();
for (int j = 0; j < reader.FieldCount; ++j) {
object rowValue = reader.GetValue(j);
row.Add(rowValue);
}
// TODO: Do something with 'row'
}
} while (reader.NextResult())
}