2011-09-30 3 views
2
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またはリピータリングですべてのリーダ情報を読み取るにはどうすればよいですか?どのように私はいつdatareaderの終わりに達するか知ることができますか?

答えて

7

最も単純な考え方は、単にRead()をループ状態にすることです。

while (reader.Read()) 
{ 
    // grab data 
} 
3

IDataReader.Read()はboolを返します。あなたのwhileループの条件としてそれを使用します。

reader = cmd.ExecuteReader();    
while(reader.Read()) 
{ 
    ddl.Items.add(reader["name"].tostring()); 
} 
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(); 
+0

+1良い答え –

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

reader.Read()がfalseを返した場合、行がもうないまで、もう行が、それはループ

while(reader.Read()) 
{ 
    //do some thing here 
} 

を使用しますので、存在しません!

しかし、DataReaderのが私の場合は、以下の

while(reader.Read()) 
{ 
    //First dataset 
    //do some thing here 
} 
reader.NextResult(); 
while(reader.Read()) 
{ 
    //Second dataset 
    //do some thing here 
} 
...... 
0

を使用する1セット、より多くを持っている場合。もう行がないときは、Read()メソッドは常にfalseを返しません。なぜ私は本当に理解していない。

私のレコードはMySQL RAND()メソッドを使用してランダムに注文され、次にC#ボタンクリックイベントはRead()メソッドを呼び出し、メッセージボックスを使用してフィールドを表示します結果と、Read()がfalseを返す場合、それが最後に達したことを伝える別のメッセージボックス。今度は、結果セットに5つの行があり、5回クリックすると、到達して終了していると伝えられますが、3回クリックすると表示されます。ここで

は私のソリューションです: は、私はすべてのクリックに変数をインクリメントし、結果セットの行数と比較し、それが返される行の数と同じだ時はいつでも、それはそれは終わり

に達していると言われます
関連する問題