- - PR -
SqlReaderに格納された行データの数
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-10-29 11:01
初投稿させていただきました。今後ともよろしくお願いします。
[環境] VB.NET SQL Server2000 Sql文を発行し SqlReaderで ------------------------ 'SQL文 sqlCmd = New SqlClient.SqlCommand(xxxxxxxxxx where xxxx= xxxxx, sqlCn) sqlReader = sqlCmd.ExecuteReader() 'テキストボックスに貼り付ける Do While (sqlReader.Read) textBox_Id(i).Text = sqlReader("利用者ID") i = i + 1 loop ↑doで回す前に、Readerに格納されている数を知りたいのですがどうすればよろしいでしょうか? 例えばArrayListを使用した場合は、「.count」格納数がわかるのですが、それと同じようにReaderに格納されている数の値を取得したいです。 プログラム暦がまだ浅いのでよろしくお願いします。 |
|
投稿日時: 2004-10-29 11:18
対象のレコードが存在するかどうかならHasRowsプロパティで分かりますが、件数までは残念ながら無理です。
事前にSELECT COUNTを発行して件数を取得する位でしょうか。 SqlDataReaderクラスを拡張しようと思っても継承できませんしね。 |
|
投稿日時: 2004-10-29 11:23
もしくはReaderを使用しないで、DataTableで取得するしかないですね。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14538&forum=7 |
|
投稿日時: 2004-10-29 11:23
SqlDataReaderは件数取得が出来ないので、最初にCount文で確認するしかないと思います。
例 ----------------------------- 'SQL文 sqlCmd = New SqlClient.SqlCommand("select count(*) xxxxxxxxx where xxxx= xxxxx", sqlCn) '件数取得 RecCnt = sqlCmd.ExecuteScalar ----------------------------- |
|
投稿日時: 2004-10-29 11:34
ご返答ありがとうございます。
Readerのプロパティになかったので無理かなと思いまして、いろいろ探っていました。皆さんが書き込まれたようにやはり無理そうですね。教えていただいたCount文のロジックでなんとか対処してみようと思います。 |
|
投稿日時: 2004-10-29 21:13
SqlReaderは、「格納」されているのではなく、その名の通り、「読み込む」という動作をすることが仕事なんですよね。
で、「なんのために個数が必要」なのでしょう。単に個数だけが必要なら、Readerを作るまでもなく、ExecuteScularでCOUNTだけ取ってくれば間に合います。データも個数も必要なら、データをストアしてしまってから個数を出しても、遅くはないでしょう。データをストアするために確保する領域、という意味であれば、ArrayList, DataTableなどは自動的に拡張してくれます。 COUNTだけのSQLを発行しその後にデータを取る、ということをすると、プログラムとデータベースの間の情報のやりとり(ラウンドトリップ)が2回発生します。これは、あまりいい方法ではありません。 _________________ |
1