Как обрабатывать несколько ResultSet, каждый с несколькими строками? IDataReader.NextResult (), заканчивающийся Read () - PullRequest
13 голосов
/ 01 октября 2010

Как обрабатывать несколько ResultSet, каждый с несколькими строками?Вызов NextResult() прерывает цикл while.

Некоторые из моих SP возвращают несколько ResultSets.Я работаю с ними с помощью NextResult(), но когда я делаю это, а мой SP имеет только один ResultSet, я вижу, что цикл while с Read () завершается, оставляя меня только с первой строкой.

Без вызоваNextResult() Я получаю все строки для первого ResultSet, но, конечно, второй и последующие ResultSet не обрабатываются?

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 Ответ

35 голосов
/ 01 октября 2010

Вам нужно создать два вложенных цикла.

  • Внешний цикл должен повторяться по наборам результатов и должен иметь 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())
} 
...