как я могу узнать, когда достигну конца устройства чтения данных? - PullRequest
2 голосов
/ 30 сентября 2011
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 или кольца повторителя?

Ответы [ 5 ]

7 голосов
/ 30 сентября 2011

Используйте метод .Read() в вашем while.

Передвигает SqlDataReader к следующей записи.

Возвращает true, если строк больше; в противном случае ложь.

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

Кроме того, вы можете привязать свой выпадающий список к своему SqlDataReader и не повторять его вручную.

ddl.DataSource = reader;
ddl.DataTextField = "name";
ddl.DataValueField = "name";
ddl.DataBind();
7 голосов
/ 30 сентября 2011

Самая простая идея - просто позволить Read() быть состоянием цикла.

while (reader.Read())
{
     // grab data
}
3 голосов
/ 30 сентября 2011

IDataReader.<a href="http://msdn.microsoft.com/en-us/library/system.data.idatareader.read.aspx" rel="nofollow noreferrer">Read()</a> возвращает бул. Используйте это как условие для вашего цикла while:

reader = cmd.ExecuteReader();            
while(reader.Read())
{
    ddl.Items.add(reader["name"].tostring());
}
2 голосов
/ 30 сентября 2011

Когда 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
}
......
1 голос
/ 30 сентября 2011
while (reader.read())
{
   // do your thing here for each row read
}
...