0

従来の 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 がタイムアウトを増加させるために機能しなかった場合、どうすればその値を上げることができますか?

4

1 に答える 1

0

問題が解決しました。CommandTimeout プロパティを接続レベルで設定する必要がありました。

conn.CommandTimeout=120

今では動作します。

于 2013-08-01T16:01:03.407 に答える