如何检查SQLDataReader是否没有行

时间:2012-09-26 20:35:33

标签: c# sqldatareader

我试图找出如何检查我的SqlDataReader是否为空或没有行(意味着保留不存在),然后显示一个消息框。出于某种原因,当我调试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 个答案:

答案 0 :(得分:37)

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

SqlDataReader.HasRows Property

答案 1 :(得分:3)

将此添加到您的代码中以检查:

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

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

答案 2 :(得分:2)

The HasRows property可能对您有帮助。

  

物业价值

     

类型:System.Boolean如果SqlDataReader包含一个或多个,则为true   行;否则是假的。

答案 3 :(得分:1)

  

出于某种原因,当我调试while dr.Read()代码时,如果它没有返回结果,它就会退出

我认为您在此处看到的是SQLDataReader.Read()如果没有下一个,则返回false,或者在这种情况下是第一个要读取的记录。

在其他人回复后,使用HasRows属性确定结果集中是否有任何行。根据您需要完成的任务,您可能希望利用Read()在第一次调用空结果集时确实返回false的事实。