ADODB查询超时

时间:2013-07-10 15:19:07

标签: vba ms-access access-vba ms-access-2010 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

3 个答案:

答案 0 :(得分:19)

不确定您是否已经解决了问题,但我遇到了同样的问题。 我正在使用Recordset.Open SQL_String,Connection。

在此之前,我只设置了超时属性,而不是在Recordset或Command上,而是在Connection对象上:

Connection.CommandTimeout = 0

答案 1 :(得分:4)

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

  

解决方案

     

还必须在页面上设置commandTimeout属性   正在使用ADODB.CommandADODB.Recordset。否则那些对象   将使用默认的30秒时间限制,因为它们不会   从关联的ADODB.Connection实例继承时间限制。

     

在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.

答案 2 :(得分:0)

对于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