私のSqlDataReader
がnullであるか、行がない(予約が存在しないことを意味する)かどうかを確認し、メッセージボックスを表示する方法を見つけようとしています。何らかの理由でWhile dr.Read())
コードにヒットしてデバッグすると、戻り結果がなければステップアウトします。
このコードをいくつかの異なる場所に配置しようとしましたが、レコードが返されない場合、メッセージボックスを起動するものはありません
if (dr.GetValue(0) == DBNull.Value || !dr.HasRows)
{
MessageBox.Show("Reservation Number Does Not Exist","Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
(read records)
}
私のコード...
try
{
using (SqlConnection con = new SqlConnection(connectionString))
{
using (SqlCommand cmd = con.CreateCommand())
{
con.Open();
cmd.CommandText = "usp_StoredProcedureName";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@regnum", regnumber);
using (SqlDataReader dr = cmd.ExecuteReader())
{
//Loop through all the rows, retrieving the columns you need.
while (dr.Read())
{
lblConf.Text = dr.GetValue(0).ToString();
lblName.Text = dr.GetValue(1).ToString() + "," + dr.GetValue(2);
lblCompany.Text = dr.GetValue(3).ToString();
lblStatus.Text = dr.GetValue(4).ToString();
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("Can not open connection! ");
}
if(dr.HasRows)
{
// ....
}
else
{
MessageBox.Show("Reservation Number Does Not Exist","Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
これをコードに追加して確認します。
sqlCommand cmd = new sqlCommand();
SqlDataReader dr = cmd.ExecuteReader();
if(dr.HasRows)
{
while(dr.Read())
{
//code
}
}
HasRows
プロパティ が役立ちます。
プロパティ値
型:System.Boolean SqlDataReaderに1つ以上の行が含まれる場合はtrue。そうでない場合はfalse。
何らかの理由で
while dr.Read()
コードにヒットしたらデバッグすると、戻り結果がない場合はステップアウトします
ここで見ているのは、SQLDataReader.Read()
がfalse
を返すということです。次がない場合、この場合は最初に読み取るレコードがあります。
他の人が応答したように、HasRows
プロパティを使用して、結果セットに行があるかどうかを判断します。達成する必要があるものによっては、Read()
が実際に空の結果セットを呼び出したときにfalse
を返すという事実を利用したい場合があります。