37

mySqlDataReaderが 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! ");
}
4

4 に答える 4

51
if(dr.HasRows)
{
    // ....
}
else
{
    MessageBox.Show("Reservation Number Does Not Exist","Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}

SqlDataReader.HasRowsプロパティ

于 2012-09-26T20:37:05.183 に答える
4

これをコードに追加して確認します。

sqlCommand cmd = new sqlCommand();
SqlDataReader dr = cmd.ExecuteReader();

if(dr.HasRows)
{
    while(dr.Read())
    {
        //code
    }
}
于 2012-09-26T20:40:10.967 に答える
2

HasRowsプロパティはあなたを助けるかもしれません。

プロパティ値

タイプ:System.BooleanSqlDataReaderに1つ以上の行が含まれている場合はtrue。それ以外の場合はfalse。

于 2012-09-26T20:37:10.177 に答える
1

何らかの理由で、while dr.Read()コードにヒットするとデバッグすると、結果が返されない場合はステップアウトします

ここに表示されているのは、次のレコード、この場合は最初に読み取るレコードがない場合にSQLDataReader.Read()返されることだと思います。false

他の人が応答したので、HasRowsプロパティを使用して、結果セットに行があるかどうかを判別します。達成する必要があることによっては、空の結果セットが最初に呼び出されたときRead()に実際に返されるという事実を利用したい場合があります。false

于 2012-09-26T20:50:06.843 に答える