【问题标题】:How to check if SQLDataReader has no rows如何检查 SQLDataReader 是否没有行
【发布时间】:2012-09-18 13:33:19
【问题描述】:

我试图弄清楚如何检查我的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! ");
}

【问题讨论】:

  • 保持循环不变,但在其周围包裹一个 If 语句以检查 if (dr.HasRows){}
  • 不,我的 SqlDataReader 将“HasRows”设置为 true...但实际上没有加载任何行。

标签: c# sqldatareader


【解决方案1】:
if(dr.HasRows)
{
    // ....
}
else
{
    MessageBox.Show("Reservation Number Does Not Exist","Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}

SqlDataReader.HasRows Property

【讨论】:

  • 谢谢这个工作我猜我使用 hasrows 属性只是用错了。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    The HasRows property 可以帮到你。

    物业价值

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多