1

特定の行数を返すストアド プロシージャがあります。

ケース 1: SqlDataAdapter を使用する場合

SqlDataAdapter sdAdapter = new SqlDataAdapter();
ds = new DataSet();
sdAdapter.SelectCommand = myCommand;
sdAdapter.Fill(ds);
int recordCount = ds.Tables[0].Rows.Count;

ケース 2: SqlDataReader を使用する場合

SqlDataReader reader = myCommand.ExecuteReader();
if (reader.HasRows)
{
   while (reader.Read())
    {
     recordCount++;
    }
 }

ケース 1 では、recordCount は正しい 15 です。

ケース 2 では、何らかの理由で、reader.HasRows が false を返しています。

構文に関して何か間違ったことをしていますか? ケース 1 でカウントを取得しているので、myCommand が適切にビルドされていると確信しています。

どんな助けでも本当に感謝しています。

ありがとうございました

4

2 に答える 2

1

1.DataReader は接続された環境で動作しますが、DataSet は切断された環境で動作します。2. DataSet は、相互に関連する任意の数の DataTable オブジェクトで構成されるデータのメモリ内キャッシュを表します。DataTable オブジェクトは、メモリ内データの表形式のブロックを表します。

詳細については、sqldataadapter または sqldatareaderを参照してください

于 2013-03-15T16:36:55.303 に答える
0

if (reader.HasRows)冗長です。と言うとwhile (reader.Read())、行がある場合にのみループします。また、このリンクでは、HasRows にはスクロール可能なカーソルが必要であることを説明しています。カーソルについては、こちらを参照してください。

于 2013-02-16T03:08:01.013 に答える