如何知道我何时到达DataReader的末尾?

3
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()
}

我写了这段代码,但问题是当语句为true时,它一直在循环!如何使用while或repeater ring读取所有读者信息?

5个回答

7
最简单的想法就是让Read()成为循环条件。
while (reader.Read())
{
     // grab data
}

7

在你的 while 循环中使用 .Read() 方法。

它使 SqlDataReader 推进到下一条记录。

如果还有更多行,则返回 true;否则返回 false。

while(reader.Read())
{
   ddl.Items.add(reader["name"].ToString());
}

或者,将下拉列表与SqlDataReader绑定,不必手动迭代。

ddl.DataSource = reader;
ddl.DataTextField = "name";
ddl.DataValueField = "name";
ddl.DataBind();

3
当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
}
......

3

IDataReader.Read()返回一个布尔值。将其用作while循环的条件:

reader = cmd.ExecuteReader();            
while(reader.Read())
{
    ddl.Items.add(reader["name"].tostring());
}

1
while (reader.read())
{
   // do your thing here for each row read
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接