- 題名: ExecuteReaderで取得した情報のループ処理
- 日時: 2006/07/11 2:51:49
- ID: 16583
- この記事の返信元:
- (なし)
- この記事への返信:
- [16585] Re[1]: ExecuteReaderで取得した情報のループ処理2006/07/11 9:20:13
- ツリーを表示
はいこーんさん、こんにちは。返信ありがとうございます。
>その前にどっかでReadしてるんじゃない?
わたしもそう思って下記のようにWhileの直前で見てみたんですが、
Whileに入る直前は確かに1レコード目が見れています。
でもWhileに入ると2レコード目になってるんです。
MessageBox.Show(objReader("hoge").ToString()) ←ココでは1レコード目
While (objReader.Read())
gldList(i, 0) = objReader("hoge").ToString()
i += 1
End While
■No16594に返信(ぽぴ王子さんの記事) > MessageBox で1レコード目が見えているということは、やはりその前に Read() した形跡があるのではないでしょうか。 > While の前の部分を少し調べてみてくださいね。 おそらくですが、「式ウォッチ」で "実行してしまっている" のではないでしょうか? 「式ウォッチ」で見る値は実行した結果です。 当然実行すれば、次のレコードに進められてしまいます。
>その前にどっかでReadしてるんじゃない?
>While の前の部分を少し調べてみてくださいね。
スミマセン!!!(>_<")
みなさんの推察どおり前でReadしてました。
抽出結果の件数確認でRead値を見ていました。
If objReader.Read = False Then
データなしメッセージ処理
End If
ここを HasRowsプロパティを見て判断するようにしたところ、
最初に書いた■の処理で1レコード目から正しく見れるように
なりました。
最近詰めて仕事やってたせいか盲目になっていました。
恥ずかしい限りです(/-\*)
つまらないことでみなさんの貴重なお時間を使わせてしまい
大変恐縮です。
分類:[.NET]
いつも利用させて頂いています。 表題ループ処理で1レコード目が設定できないという現象で困っています。 DBからExecuteReaderで取得した情報をGridに設定しようとし、 下記●のように書いたのですが、設定されるのは2レコード目からで 1レコード目が設定できませんでした。 while条件のReadメソッドで次のレコードに移動してしまい、 whileの中に入ったら2レコード目になってしまっているようです。 (whileの前に「objReader("hoge").ToString()」を見ると1レコード目 の情報です。) 色々なサイトで●のような書き方をしているのですが、1レコード目も うまく設定できるのでしょうか?何かわたしの方が処理が抜けていたり するのでしょうか? どなたか詳しい方教えてください。m(._.)m 仕方ないので今は■のような書き方にして正しく1レコード目から設定できる ようにしています。 ●1レコード目が設定できない While (objReader.Read()) gldList(i, 0) = objReader("hoge").ToString() i += 1 End While ■正しく設定できる EndFlg = True While EndFlg = True gldList(i, 0) = objReader("hoge").ToString() i += 1 If objReader.Read() = False Then EndFlg = False End If End While