【发布时间】:2013-07-08 14:41:20
【问题描述】:
我正在尝试打开一个正在超时的查询。我已经尝试设置 timeout 属性,但它似乎不想接受它。
使用 MS-SQL Server 管理窗口 (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
【问题讨论】:
-
@HK1,你会看到我将 ADODB 命令上的命令超时设置为 0(无限超时)
-
不知道为什么 30 秒的超时仍然存在,看起来很奇怪。如果您调用 'rs.open cmd' 而不是 'set rs = cmd.execute' 将命令对象作为源传递会发生什么。只是好奇你是否在那里遇到同样的问题?
-
您的连接设置如何?当我使用 ADO 连接时,我总是使用我创建的显式连接,因此我不习惯使用 CurrentProject.Connection。这是 ADP 吗?
-
@HK1,是的,这是一个 ADP(我无法更改)