Тайм-аут запроса ADODB

Я пытаюсь открыть запрос, который отключается. Я попытался установить свойство тайм-аута, но он, похоже, не хочет его принимать.

Выполнение запроса занимает 34 секунды, используя окно управления MS-SQL Server (SQL Server 2005), поэтому я знаю, что мне нужно увеличить таймаут.

Текущий код:

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, но если я CurrentProject.Connection.CommandTimeout = 120 значение сразу после этой команды, он останется на 30

Свойства соединения:

Provider = Microsoft.Access.OLEDB.10.0; Persist Security Info = False; Источник данных = MyServer; Интегрированная безопасность = SSPI; Начальный каталог = MyDatabase; Поставщик данных = 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

Ответы

Ответ 1

Не уверен, что у вас уже есть проблема, но у меня была такая же проблема. Я делаю это с Recordset.Open SQL_String, Connection.

И до этого я просто устанавливаю свойство тайм-аута, а не в Recordset или Command, а в объекте Connection:

Connection.CommandTimeout = 0

Ответ 2

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

Решение

Вы также должны установить свойство commandTimeout для используемого ADODB.Command или ADODB.Recordset. В противном случае эти объекты будут использовать ограничение по умолчанию 30 секунд, поскольку они не наследуют ограничение времени от связанного экземпляра ADODB.Connection.

Пример использования VBScript в ASP 3:

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.

Ответ 3

Для OLEDB вам не нужно указывать временные рамки в соединении: -

Provider = Microsoft.Access.OLEDB.10.0; Persist Security Info = False; Источник данных = MyServer; Интегрированная безопасность = SSPI; Начальный каталог = MyDatabase; Поставщик данных = SQLOLEDB.1; Время ожидания подключения = 30