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

lea*_*tes 13 c# stored-procedures datareader

如何处理多个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
    }
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*cek 35

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

  • 外部循环应该遍历结果集,并且应该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())
} 
Run Code Online (Sandbox Code Playgroud)