2010-10-01 65 views
9

如何處理多個ResultSets,每個都有多行? 對NextResult()的調用打破了while循環。如何處理多個ResultSet,每個都有多行? IDataReader.NextResult()結束閱讀()

我的一些SP返回多個ResultSets。我使用NextResult()來處理這些問題,但是當我這樣做並且我的SP只有一個ResultSet時,我看到帶有Read()的while循環只剩下第一行。

沒有對NextResult()的調用,我得到了第一個ResultSet的所有行,但當然第二個和後續的ResultSets沒有得到處理?

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

回答

29

您需要創建兩個嵌套循環。

  • 外環應遍歷結果集,並應在結束
  • 具有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()) 
} 
+0

不錯。 – learnerplates 2010-10-01 15:47:24

+0

這太棒了。我很少遇到過這樣的做法,我甚至忘記它,因此從來沒有想過在看到這個之前使用它。謝謝! – KSwift87 2014-05-02 13:28:46

+0

do/while結構完美的縫合 – pimbrouwers 2016-03-08 22:31:28

相關問題