従来の ASP スクリプトには、ストアド プロシージャを実行する SQL ステートメントがあります。
sql="exec my_stored_proc"
次に、ADO Recordset オブジェクトに結果を入力し、レコードセットをループしようとします。
ストアド プロシージャ自体が仮想テーブルにデータを入力し、プロシージャの最後の行が結果を返します。
select tableName, subTable, FieldLabel, total, FieldOrder from @AdmissionsTable
SQL Management Studio から直接実行すると結果が得られますが、ASP ページから実行すると、次の行が表示されます。
do while not rs.eof
「オブジェクトが閉じている場合、操作は許可されていません」というエラーが発生します。
別のストアド プロシージャに対してテストし、結果を rs オブジェクトに取得できたので、ストアド プロシージャを実行しようとしているからではないことはわかっています。
仮想テーブルを使用しているからですか?または、他の何か?
追加コード:
SQL 文字列が割り当てられたら、接続を開き、rs オブジェクトを設定して、クエリを実行します。
conn.Open strConnection
Set rs = server.createobject("ADODB.Recordset")
rs.open sql, conn
次に、エラー行が表示されます。
do while not rs.eof
さらに更新:
rs.open 行の直後に、response.write "RS Populated" にデバッグ コードを追加すると、この行が実行されます。しかし、その直後にエラーがまだ表示されるので、これはどういうわけか RS がすぐに閉じられていることを意味していると推測しています。理由がわからない。
さらに更新:
少なくとも問題を切り分けました。err オブジェクトはエラーとして「Query timeout」を返し、rs.ActiveConnection.CommandTimeout はタイムアウト値として「30」を返します。
クエリが大きく、実行に少なくとも 60 秒かかるため、rs.ActiveConnection.CommandTimeout = 120 を設定しようとしましたが、それでも失敗し、最も腹立たしいことに、タイムアウト値として「30」を返します。
rs.ActiveConnection.CommandTimeout = 120 がタイムアウトを増加させるために機能しなかった場合、どうすればその値を上げることができますか?