- PR -

SqlReaderに格納された行データの数

1
投稿者投稿内容
オベ
会議室デビュー日: 2004/10/29
投稿数: 11
投稿日時: 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/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2004-10-29 11:18
対象のレコードが存在するかどうかならHasRowsプロパティで分かりますが、件数までは残念ながら無理です。
事前にSELECT COUNTを発行して件数を取得する位でしょうか。
SqlDataReaderクラスを拡張しようと思っても継承できませんしね。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-10-29 11:23
もしくはReaderを使用しないで、DataTableで取得するしかないですね。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14538&forum=7
fizzy
会議室デビュー日: 2003/09/09
投稿数: 17
お住まい・勤務地: TOKYO
投稿日時: 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
投稿日時: 2004-10-29 11:34
ご返答ありがとうございます。
Readerのプロパティになかったので無理かなと思いまして、いろいろ探っていました。皆さんが書き込まれたようにやはり無理そうですね。教えていただいたCount文のロジックでなんとか対処してみようと思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-29 21:13
 SqlReaderは、「格納」されているのではなく、その名の通り、「読み込む」という動作をすることが仕事なんですよね。

 で、「なんのために個数が必要」なのでしょう。単に個数だけが必要なら、Readerを作るまでもなく、ExecuteScularでCOUNTだけ取ってくれば間に合います。データも個数も必要なら、データをストアしてしまってから個数を出しても、遅くはないでしょう。データをストアするために確保する領域、という意味であれば、ArrayList, DataTableなどは自動的に拡張してくれます。
 
 COUNTだけのSQLを発行しその後にデータを取る、ということをすると、プログラムとデータベースの間の情報のやりとり(ラウンドトリップ)が2回発生します。これは、あまりいい方法ではありません。

_________________
1

スキルアップ/キャリアアップ(JOB@IT)