16

それぞれが複数の行を持つ複数の ResultSet を処理する方法は? への呼び出しNextResult()は while ループを中断します。

一部の SP は複数の ResultSet を返します。私はこれらを処理してNextResult()いますが、SP に ResultSet が 1 つしかない場合、Read() を使用した while ループが終了し、最初の行だけが残ります。

への呼び出しがなければ、NextResult()最初の ResultSet のすべての行を取得しますが、もちろん 2 番目以降の 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
    }
}
4

1 に答える 1

38

ネストされたループを 2 つ作成する必要があります。

  • 外側のループは結果セットを反復処理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())
} 
于 2010-10-01T15:16:42.583 に答える