Тайм-аут запроса 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