Подтвердить что ты не робот

Как проверить, нет ли SQLDataReader строк

Я пытаюсь выяснить, как проверить, имеет ли мой 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! ");
}
4b9b3361

Ответ 1

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

Свойство SqlDataReader.HasRows

Ответ 2

Добавьте это в свой код, чтобы проверить:

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

if(dr.HasRows)
{
    while(dr.Read())
    {
        //code
    }
}

Ответ 3

Свойство HasRows может вам помочь.

Значение свойства

Тип: System.Boolean Значение true, если SqlDataReader содержит один или несколько строки; иначе false.

Ответ 4

По какой-то причине, когда я отлаживаю один раз, когда он попадает в код while dr.Read(), он выходит, если у него нет результата возврата

Я думаю, что вы видите здесь, что SQLDataReader.Read() возвращает false, если нет следующего или в этом случае первая запись для чтения.

Как ответили другие, используйте свойство HasRows, чтобы определить, есть ли у вас какие-либо строки в наборе результатов. В зависимости от того, что вам нужно выполнить, вы можете воспользоваться тем фактом, что Read() действительно возвращает false при первом вызове пустого набора результатов.