2010-10-01 9 views
9

¿Cómo manejar múltiples ResultSets, cada uno con múltiples filas? La llamada a NextResult() rompe el ciclo while.¿Cómo manejar múltiples ResultSets, cada uno con múltiples filas? IDataReader.NextResult() ending Read()

Algunos de mis SP devuelven varios ResultSets. Estoy manejando esto con NextResult() pero cuando lo hago y mi SP solo tiene un ResultSet único, veo que el ciclo while con Read() termina dejándome solo con la primera fila.

Sin la llamada a NextResult() obtengo todas las filas para el primer ResultSet pero, por supuesto, el segundo y posteriores ResultSets no se procesan?

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

Respuesta

29

Necesita crear dos bucles anidados.

  • El bucle exterior debe iterar sobre los conjuntos de resultados y debe tener NextResult al final
  • El bucle interior debe iterar sobre filas de un conjunto de resultados y debe tener Read al principio.

Algo así como:

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

agradable sobre Tomas. – learnerplates

+0

Esto fue genial. Rara vez me encuentro con bucles do-while que olvidé que existía y por lo tanto nunca pensé usar uno hasta ver esto. ¡Gracias! – KSwift87

+0

Sitch perfecto para una estructura do/while – pimbrouwers

Cuestiones relacionadas