Excel VBA - 在x执行后调用存储过程超时

时间:2016-02-10 10:53:07

标签: sql sql-server excel excel-vba vba

有人可以解释一下这种行为吗?

我们正在执行一个存储过程,从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!

1 个答案:

答案 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秒,这有望解决它。