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

Sql Excel VBA-执行x次后调用存储过程超时,sql,sql-server,excel,vba,Sql,Sql Server,Excel,Vba,有人能给我解释一下这种行为吗 我们正在执行一个从ExcelVBA调用它的存储过程,并将结果放在透视表中。我们使用以下代码: 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=*

有人能给我解释一下这种行为吗

我们正在执行一个从ExcelVBA调用它的存储过程,并将结果放在透视表中。我们使用以下代码:

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%和最后一次运行时,我们再次执行完整的存储过程,现在不再出现超时错误

当我现在调用它时,它将在大约3秒钟内返回Excel中透视表中的结果。这不是我第一次遇到这个问题

还有其他人有过这个问题吗?我能怎么办?是什么导致了这种行为


谢谢

这通常发生在需要30秒以上的请求时,这是命令的默认超时时间

试着改变这个

With cmd
    .ActiveConnection = cnn
    .CommandType = adCmdText
    .commandText = "EXEC spTest '" xxx "', '" & xxx "';"
End With


这会将您的超时设置为1200秒,希望这能解决问题。

发布存储过程代码。您好,我想我已经找到了问题所在。我们已经在stoed过程中添加了WITH RECOMPILE提示。这是一个参数嗅探问题。ThxHi,在问这个问题之前我已经试过了。这不管用。但是thx
With cmd
    .ActiveConnection = cnn
    .CommandTimeout = 1200
    .CommandType = adCmdText
    .commandText = "EXEC spTest '" xxx "', '" & xxx "';"
End With