【问题标题】:how can i know when i reach end of a datareader?我怎么知道我何时到达数据读取器的末尾?
【发布时间】:2011-09-30 18:18:34
【问题描述】:
cmd.CommandText = "select name from Tbl_Shahr_No";
SqlDataReader reader = null;
reader = cmd.ExecuteReader();
reader.Read();
while(reader.HasRows)
{
ddl.Items.add(reader["name"].tostring());
reader.read()
}
我编写了这段代码,但问题是 while 语句始终为真!
如何使用while 或中继环读取所有阅读器信息?
【问题讨论】:
标签:
c#
database
sqldatareader
【解决方案1】:
最简单的想法是让Read() 成为循环条件。
while (reader.Read())
{
// grab data
}
【解决方案2】:
在您的while 中使用.Read() 方法。
它将 SqlDataReader 推进到下一条记录。
如果有更多行,则返回 true;否则为假。
while(reader.Read())
{
ddl.Items.add(reader["name"].ToString());
}
或者,将您的下拉列表数据绑定到您的 SqlDataReader,并且不要费心手动对其进行迭代。
ddl.DataSource = reader;
ddl.DataTextField = "name";
ddl.DataValueField = "name";
ddl.DataBind();
【解决方案3】:
IDataReader.@987654321@ 返回一个布尔值。将其用作您的 while 循环的条件:
reader = cmd.ExecuteReader();
while(reader.Read())
{
ddl.Items.add(reader["name"].tostring());
}
【解决方案4】:
当 reader.Read() 返回 false 时,没有更多的行,所以使用
while(reader.Read())
{
//do some thing here
}
它将循环直到没有更多的行!
但如果数据读取器有多个数据集,则使用以下数据集
while(reader.Read())
{
//First dataset
//do some thing here
}
reader.NextResult();
while(reader.Read())
{
//Second dataset
//do some thing here
}
......
【解决方案5】:
while (reader.read())
{
// do your thing here for each row read
}