2010-10-01 9 views
9

Jak obsługiwać wiele zestawów wyników, każdy z wieloma wierszami? Wywołanie funkcji NextResult() powoduje przerwanie pętli while.Jak obsługiwać wiele zestawów wyników, każdy z wieloma wierszami? IDataReader.NextResult() ending Read()

Niektóre z moich SP zwracają wiele ResultSet. Zajmuję się nimi za pomocą funkcji NextResult(), ale kiedy to robię, a mój SP ma tylko jeden zestaw wyników, widzę, że pętla while z Read() kończy, zostawiając mnie tylko z pierwszym wierszem.

Bez wywołania funkcji NextResult() otrzymuję wszystkie wiersze dla pierwszego zestawu wyników, ale oczywiście drugi i kolejne zestawy wyników nie są przetwarzane?

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 
         } 
        } 

Odpowiedz

29

Musisz utworzyć dwie zagnieżdżone pętle.

  • Pętla zewnętrzna powinna iteracyjnego zestawy wyników i mieć NextResult na końcu
  • Pętla wewnętrzna powinna iteracyjnego wierszy wynikowej powinien Read na początku.

Coś jak:

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()) 
} 
+0

miłe na Tomas. – learnerplates

+0

To było świetne. Rzadko spotykam się z pętlami do-while, o których istnieniu zapomniałem, a więc nigdy nie pomyślałem o tym, dopóki tego nie zobaczę. Dziękuję Ci! – KSwift87

+0

Idealne rozwiązanie dla struktury do/while – pimbrouwers

Powiązane problemy