Как обрабатывать несколько наборов результатов, каждый с несколькими строками? Объекта 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())
}