如何处理多个ResultSet,每个ResultSet有多个行? IDataReader.NextResult()结束Read()

如何处理多个ResultSet,每个ResultSet有多个行? 对NextResult()的调用打破了while循环。

我的一些SP返回多个ResultSet。 我正在使用NextResult()处理这些,但是当我这样做并且我的SP只有一个ResultSet时,我看到带有Read()的while循环完成后只剩下第一行。

如果没有调用NextResult()我会得到第一个ResultSet的所有行,但当然第二个和后续的ResultSet不会得到处理?

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

您需要创建两个嵌套循环。

  • 外部循环应该迭代结果集,并且最后应该有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()) }