如何检查 SQLDataReader 是不是没有行
Posted
技术标签:
【中文标题】如何检查 SQLDataReader 是不是没有行【英文标题】: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...但实际上没有加载任何行。 【参考方案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
的事实。
【讨论】:
以上是关于如何检查 SQLDataReader 是不是没有行的主要内容,如果未能解决你的问题,请参考以下文章
检查它是不是是 sqldatareader 中的最后一条记录