如何检查SQLDataReader是否没有行

我试图弄清楚如何检查我的SqlDataReader是否为空或没有行(意味着保留不存在),然后显示一个消息框。 出于某种原因,当我调试一次它遇到While dr.Read())代码时,如果它没有返回结果,它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); } 

SqlDataReader.HasRows属性

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

 sqlCommand cmd = new sqlCommand(); SqlDataReader dr = cmd.ExecuteReader(); if(dr.HasRows) { while(dr.Read()) { //code } } 

HasRows属性可能对您有所帮助。

适当的价值

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

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

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

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