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
}
}
いいえ。DataReaderに行が含まれているかどうかにかかわらず、_(dr.HasRows)
_を確認することは必須ではありません。
Read()
は、フェッチする行がもうない場合はFalseを返しますが、_Reader.HasRows
_はRead()
ですので、グッドプラクティス_Reader.HasRows
_を使用するのは例外に陥る可能性のあるRead()
以外の何かを誤って行う可能性があります。
注意してください。 HasRows()は、行(実際には437行)があるにもかかわらず、CTEクエリに対してfalseを返します。
DataReaderに行(dr.HasRows)があるかどうかを確認することは必須ではありません。 Read()メソッドは、読み取るデータがさらにある場合はtrueを返し、データがもうない場合はfalseを返すため、whileループが中断されます。
これは主にデータ(1つまたは複数の結果セット)を持つ場合と持たない場合があるストアドプロシージャであり、whileループ以外の処理(ヘッダー/フッターの初期化など)を行う場合は、最初に確認する方が「簡単」です。データがある場合)。