ASP:ADODBのRecordCount - ぷちWiki

最終更新日時:

ADODB で検索した結果返ってくる Recordset。
Recordset には、RecordCount というプロパティがあり、どうやらこれには Recordset のレコード数が格納されているようなのですが、少なくとも DB が SQL Server でデフォルトの状態では、実際には -1 が返ってきます。

これについては仕様らしく、MS のサイトで以下のように解説されています。
http://support.microsoft.com/kb/194973/ja

---
サーバーサイド カーソルを使用して作成したレコードセットに対して RecordCount プロパティを取得しようとしたとき、-1 が返されることがあります。
ActiveX Data Objects (ADO) Version 2.0 においては、CursorType プロパティが adOpenForwardonly (前方スクロール カーソル) または adOpenDynamic (動的カーソル) のときにこの結果が得られます。
また、異なる OLEDB プロバイダの間で結果が異なる場合があります。
---

正直なんのことやらサッパリなのですが、上記のサイトには以下のように解決方法の解説もあります。

---
サーバーサイド カーソルで、CursorType プロパティに adOpenKeyset もしくは adOpenStatic を使用するか、クライアントサイド カーソルを使用します。
クライアントサイド カーソルでは、CursorType の設定値がどのようなものであっても、adOpenStatic のみが適用されます。
---

こちらも正直よく分からないのですが、とりあえず以下のようにクライアントサイド カーソルに設定すれば良いようです。
adUseClient がクライアントサイド カーソルの指定となります。

 Set RS = Server.CreateObject("ADODB.Recordset")
 conn.CursorLocation = adUseClient
 RS.Open sql, conn
 total = RS.RecordCount