23

if (dr.HasRows)関数の前に追加することが有益かどうかを確認しようとしていwhile (dr.read())ます。つまり、技術的には、行がない場合は読み取られないので、最初にこれを確認しても問題ありませんか?

using (SqlDataReader dr = cmd.ExecuteReader())
{
    if (dr.HasRows)
    {
        while (dr.Read())
        {
            ....do stuff here
        }
    }
}

それとも、提供する値があることを確認するだけであれば、これは本質的にまったく同じことをするのでしょうか...

using (SqlDataReader dr = cmd.ExecuteReader())
{
    while (dr.Read())
    {
        ....do stuff here
    }
}    
4

5 に答える 5

20

いいえ..DataReader に行が含まれているかどうかを確認することは必須ではありませ(dr.HasRows)ん。

Read()フェッチする行がもうない場合はFalseを返しますが、Reader.HasRowsそれが何をするかについては、例外に陥る可能性がある以外のことを誤って行う可能性があるため、使用するRead()ことをお勧めします。Reader.HasRowsRead()

于 2013-01-07T13:17:07.077 に答える
5

気をつけて。HasRows() は、行 (実際には 437 行) があるにもかかわらず、私の CTE クエリに対して false を返します。

于 2013-11-28T22:37:52.637 に答える
2

DataReader に行があるかどうかを確認することは必須ではありません (dr.HasRows)。Read() メソッドは、読み取るデータが他にある場合は true を返し、それ以上データがない場合は false を返すため、while ループが中断されます。

于 2013-01-07T13:12:18.537 に答える
1

これは主に、データ (1 つまたは複数の結果セット) がある場合とない場合があるストアド プロシージャ用であり、while ループ以外の処理 (つまり、ヘッダー/フッターの初期化など) を行う場合に備えて、最初にチェックする方が「簡単」です。データがある場合)。

于 2013-01-07T13:11:13.360 に答える