ストアド プロシージャで OLEDB を使用してレコードセットを返せないのはなぜですか?
私はかつて一時テーブル上で動作するプログラムを書いたことがあります (主な機能は各カテゴリの上位 10 件のレコードを取得することです)。
ストアド プロシージャは ODBC を使用してデータベースに通常どおり接続し、正しい結果を取得できます。ただし、oledb を使用して接続すると、レコード セットを返すことができず、操作によってレコード セットが返されると、次のエラー メッセージが表示されます。
ADODB.レコードセット エラー '800a0e78'
オブジェクトが閉じている場合、アプリケーションによって要求された操作は許可されません。
それは私を困惑させます。何故ですか?
これは、OLEDB と ODBC の間に違いがあるためです。つまり、ASP が ODBC からレコード セットを取得するとき、ODBC は create table によって作成されたレコードをフィルターで除外します。
or insert into は、位置を占有するだけで操作を実行できないいくつかのレコード セットを生成します。ASP が OLEDB からレコード セットを取得する場合、OLEDB は実行しません。
これらのレコードセットはフィルターで除外されません。したがって、ストアド プロシージャでレコードセットを返す前に、set nocount on を実行する必要があります。
ストアド プロシージャはレコードセットを返すことを禁止されており、レコードセットを返すには最初に set nocount off を実行する必要があります。このようにして、問題は解決されます。