VB.NET MSDEでレコード数を取得するには?


ゴメス  2005-06-14 19:32:05  No: 122657  IP: [192.*.*.*]

お疲れ様です。
VB.NET、MSDEを用い、SQLのSELECT COUNT(*)でレコード件数を
取得したいのですが、

Dim rec As New ADODB.Recordset
Dim intCount as Integer

select count(*) from table where col = xxxx

intCount = rec.RecordCount

とすると、必ず取得結果が-1となってしまいます。
ヘルプをみますと、プロバイダがサポートしていない場合、
必ず-1が返るとあるのですが、他に何かレコード件数を
取得する上手い方法はないものでしょうか?

お忙しいところ申し訳ありませんが、ご教授お願いいたします。

編集 削除
魔界の仮面弁士  2005-06-14 19:49:31  No: 122658  IP: [192.*.*.*]

どのようにして、Recordsetを作成しましたか?
具体的なコードを提示してください。


Recordset は、CursortLocation / CursorType / LockType によって、
その性質を変化させる事に注意してください。

たとえば、Connection.Execute メソッドで取得した Recordset は、
CursorType = adOpenForwardOnly というモードになります。
adOpenForwardOnly とは、高速化のため、『現在行』だけを保持し、
他の行の情報を取得しないモードです。現在行しかわからないので、
全体の行数も不明です。すなわち、RecordCount = -1 ですね。


RecordCount を使いたい場合には、adOpenKeyset、または adOpenStatic を
指定すれば OK のはずです。試してみてください。


なお、CursorType にはもう一つ、adOpenDynamic というモードがありますが、
これは使わない方が良いでしょう。高機能なのですが、扱いが難しいので。

編集 削除