web-dev-qa-db-ja.com

短いプロシージャを実行しようとすると、クエリのタイムアウトが期限切れになりました

これが私の接続文字列です:

Global Const strConn As String = _
    "PROVIDER=SQLNCLI10;" & _
    "P-SSWORD=blahblah;" & _
    "USER ID=blahblah;" & _
    "INITIAL CATALOG=blah;" & _
    "DATA SOURCE=blah;" & _
    "CONNECT TIMEOUT=0;" & _
    "COMMAND TIMEMOUT=0" & _
    "PACKET SIZE=4096;"

そして、ここに簡単なコードがあります:

Sub MoveDataUsingADO()

Dim cn As Object
Dim cm As Object
Dim rs As Object

    'get in touch with the server
    'Create ado objects.
Set cn = CreateObject("ADODB.Connection")
cn.connectiontimeout = 0
cn.Open strConn
cn.CommandTimeout = 0

Set cm = CreateObject("ADODB.Command")
Set cm.ActiveConnection = cn
cm.CommandType = 4 'adCmdStoredProc

Set rs = CreateObject("ADODB.Recordset")
Set rs.ActiveConnection = cn


cm.CommandText = "WH.dbo.ourProcName"
With wb.Sheets("Data")
    .Activate
    .Range(.Cells(2, 1), .Cells(.Cells(.Rows.Count, 2).End(Excel.xlUp).Row + 1, .Cells(1, .Columns.Count).End(Excel.xlToLeft).Column)).ClearContents
End With
With rs
    .Open Source:=cm.Execute '<=====errors here===========
     wb.Sheets("Data").Cells(wb.Sheets("Data").Rows.Count, 1).End(Excel.xlUp)(2, 1).CopyFromRecordset rs
    .Close      'close connection
End With
...
...

上記のマークの時点で、次のエラーが発生します。

enter image description here

わかりません-プロシージャの実行には55秒かかり、vba全体でタイムアウトを0...に設定しました...これにより強制的にnot期限切れになると思いました?

7
whytheq

コマンドで明示的にタイムアウトを設定しようとしましたか?

cm.CommandTimeout = 0

接続に設定するのではなく。接続タイムアウトは、コマンドが実行されなければならない時間であるのに対し、接続が拒否される前に接続を確立しようとする時間を処理すると思います。

16
Simon1979

クエリの実行にどのくらいの時間がかかるかわかりますか?タイムアウト期間とは別の問題があるのでしょうか?

次のように、コマンドオブジェクトにタイムアウトを設定してみてください。

cm.CommandText = "WH.dbo.ourProcName"
cm.CommandTimeout = 120
With wb.Sheets("Data")
    .Activate
    .Range(.Cells(2, 1), .Cells(.Cells(.Rows.Count, 2).End(Excel.xlUp).Row + 1, .Cells(1, .Columns.Count).End(Excel.xlToLeft).Column)).ClearContents
End With
With rs
    .Open Source:=cm.Execute '<=====errors here===========
     wb.Sheets("Data").Cells(wb.Sheets("Data").Rows.Count, 1).End(Excel.xlUp)(2, 1).CopyFromRecordset rs
    .Close      'close connection
End With
2
HK1