webdevqa.jp.net

ADODBクエリタイムアウト

クエリを開こうとしていますが、タイムアウトになりました。タイムアウトプロパティを設定しようとしましたが、受け入れたくないようです。

クエリは、MS-SQL Server Managementウィンドウ(SQL Server 2005)を使用して実行するのに34秒かかるため、タイムアウトを増やす必要があることはわかっています。

現在のコード:

Public Function retRecordSet(StrSQL)
Dim cmd ' as new ADODB.Command
Dim rs 'As New ADODB.Recordset

Set cmd = CreateObject("ADODB.Command")
Set rs = CreateObject("ADODB.Recordset")

cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = StrSQL
cmd.CommandTimeout = 0
Set rs = cmd.Execute

Set retRecordSet = rs
End Function

また、接続自体のタイムアウトを設定しようとしましたCurrentProject.Connection.CommandTimeout = 120、ただしこのコマンドの直後に値を照会すると、30のままになります

接続プロパティ:

Provider = Microsoft.Access.OLEDB.10.0; Persist Security Info = False; Data Source = MyServer; Integrated Security = SSPI; Initial Catalog = MyDatabase; Data Provider = SQLOLEDB.1

Data Source Object Threading Model = 1
Multiple Results = 3
Multiple Parameter Sets = False
SQL Support = 283
Catalog Location = 1
Catalog Term = database
Catalog Usage = 15
Rowset Conversions on Command = True
Extended Properties = 
Cache Authentication = True
Encrypt Password = 
Persist Encrypted = 
Persist Security Info = False
Asynchronous Processing = 0
Connect Timeout = 600
Protection Level = 
Prompt = 4
Mode = 
Location = 
Locale Identifier = 1033
Impersonation Level = 
Window Handle = 
Data Source = MyServer
User ID = 
Password = 
Integrated Security = SSPI
Mask Password = 
Initial Catalog = MyDatabase
Lock Owner = 
Bind Flags = 
General Timeout = 0
Data Provider = SQLOLEDB.1
Autocommit Isolation Levels = 4096
Unique Reshape Names = False
12
SeanC

あなたがすでに問題を乗り越えたかどうかはわかりませんが、私は同じ問題を抱えていました。私はRecordset.Open SQL_String、Connectionでそれをやっています。

そしてその前に、RecordsetやCommandではなく、Connectionオブジェクトにタイムアウトプロパティを設定するだけです。

Connection.CommandTimeout = 0
22
Manuel

from http://codingjourney.blogspot.com/2008/11/ado-connection-timeout-command-or.html

ソリューション

使用中のADODB.CommandまたはADODB.RecordsetcommandTimeoutプロパティも設定する必要があります。それ以外の場合、それらのオブジェクトは、関連付けられたADODB.Connectionインスタンスから制限時間を継承しないため、デフォルトの制限時間である30秒を使用します。

ASP 3:でVBScriptを使用する例

set con = createObject("ADODB.Connection")
con.open connectionString
con.commandTimeout = 60
set command = createObject("ADODB.Command")
command.activeConnection = con
command.commandType = adCmdText
command.commandText = sql
command.commandTimeout = 60
command.execute
response.write command.commandTimeout 'This is now 60 seconds.
6
BreakBadSP

OLEDBの場合、接続のタイミングを指定する必要はありません:-

Provider = Microsoft.Access.OLEDB.10.0; Persist Security Info = False; Data Source = MyServer; Integrated Security = SSPI; Initial Catalog = MyDatabase; Data Provider = SQLOLEDB.1; Connect Timeout = 30

0
Richard Spencer