2010-10-01 16 views
9

Làm thế nào để xử lý nhiều ResultSets, mỗi Result có nhiều hàng? Cuộc gọi đến NextResult() ngắt vòng lặp while.Cách xử lý nhiều ResultSets, mỗi ResultSets có nhiều hàng? IDataReader.NextResult() end Read()

Một số SP của tôi trả về nhiều ResultSets. Tôi đang xử lý chúng với NextResult() nhưng khi tôi làm và SP của tôi chỉ có một ResultSet đơn, tôi thấy vòng lặp while với Read() kết thúc để lại cho tôi chỉ với Row đầu tiên.

Không có cuộc gọi đến NextResult() Tôi nhận được tất cả các hàng cho ResultSet đầu tiên nhưng tất nhiên ResultSets thứ hai và tiếp theo không được xử lý?

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

Trả lời

29

Bạn cần tạo hai vòng lồng nhau.

  • Các vòng ngoài nên lặp qua tập kết quả và nên có NextResult vào cuối
  • Các vòng lặp bên trong phải lặp qua các hàng trong một tập hợp kết quả và nên có Read lúc đầu.

Cái gì như:

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

đẹp trên Tomas. – learnerplates

+0

Điều này thật tuyệt. Tôi hiếm khi gặp phải các vòng lặp do-while nữa mà tôi quên nó thậm chí còn tồn tại và do đó không bao giờ nghĩ đến việc sử dụng nó cho đến khi thấy điều này. Cảm ơn bạn! – KSwift87

+0

Sitch hoàn hảo cho cấu trúc do/while – pimbrouwers

Các vấn đề liên quan