有人可以解释一下这种行为吗?
我们正在执行一个存储过程,从Excel VBA调用它并将结果放在数据透视表中。我们使用此代码:
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
Set cmd = New ADODB.Command
connectionstring = "Provider=SQLOLEDB.1;Password=***;User ID=***;Initial Catalog=***;Data Source=***"
cnn.Open connectionstring
With cmd
.ActiveConnection = cnn
.CommandType = adCmdText
.commandText = "EXEC spTest '" xxx "', '" & xxx "';"
End With
Set rst = cmd.Execute
存储过程:包含200行代码,在1秒内执行,结果正确。
成功执行x时间后出现问题,我们收到超时错误。解决这个问题的唯一方法是注释掉75%的存储过程并从Excel中再次执行。接下来,我们注释掉50%的存储过程并再次执行它。接下来25%和最后一次运行我们再次执行完整存储过程,现在不再出现超时错误。
当我现在调用它时,它会在Excel中的数据透视表中返回大约3秒钟的结果。这不是我第一次遇到这个问题。
有没有其他人遇到过这个问题?我能做些什么呢?是什么导致了这种行为?
THX!
答案 0 :(得分:0)
当你的quires超过30秒时,通常会发生这种情况,这是该命令的默认超时。
尝试更改此
With cmd
.ActiveConnection = cnn
.CommandType = adCmdText
.commandText = "EXEC spTest '" xxx "', '" & xxx "';"
End With
到
With cmd
.ActiveConnection = cnn
.CommandTimeout = 1200
.CommandType = adCmdText
.commandText = "EXEC spTest '" xxx "', '" & xxx "';"
End With
这会将你的超时设置为1200秒,这有望解决它。