如果服务器不存在,如何更快地使ADO连接超时?

时间:2011-08-05 19:12:36

标签: sql vb6 timeout database-connection ado

我的任务是支持旧的VB6应用程序。 (对我来说)我遇到ADO连接超时属性问题。如果服务器存在,下面的方法可以正常工作,但如果服务器不存在或网络连接没有启动,即使intTimeout设置为1,也需要整整30秒才能超时。

有没有办法让ADO更快地无法连接? 这甚至可能吗? 谢谢!

Public Sub GetConnectionObject(ByRef oCn As ADODB.Connection, strServer As String,     strInitialCatalog As String, Optional intTimeout = 10)

    Dim strConnectionString As String
    strConnectionString = "Data Source=[SERVER];Provider=SQLOLEDB.1;User ID=ScanReq1;Password=ScanR3Q;Initial Catalog=[INITIALCATALOG];ConnectionTimeout=" & intTimeout & ";"
    strConnectionString = Replace(strConnectionString, "[SERVER]", strServer)
    strConnectionString = Replace(strConnectionString, "[INITIALCATALOG]", strInitialCatalog)

    Set oCn = New ADODB.Connection
    oCn.CursorLocation = adUseClient
    oCn.ConnectionString = strConnectionString
    oCn.CommandTimeout = intTimeout
    oCn.ConnectionTimeout = intTimeout

    oCn.Open

End Sub

2 个答案:

答案 0 :(得分:5)

在建立TCP连接后,ConnectionTimeout启动。如果找不到服务器,则此值由Windows TCP子系统控制。

如果这对你来说真的是个问题,我会先尝试ping这个盒子(网上有很多通过VB6 ping的例子)。

答案 1 :(得分:0)

我也打过这个。设置ConnectionTimeout的替代方法可能是使Open调用异步,然后在您自己的代码中处理超时。下面的简单快速示例(注意:这是在VBA中,但应该很容易移植到VB6 ):

Dim conn As New ADODB.Connection
Dim time As Single, timeOut As Single
conn.ConnectionString = "your connection string here"
conn2.Open Options:=adAsyncConnect                    ' value is 16
timeOut = 5
time = Timer()
Do Until Timer() - time > timeOut Or conn2.State = adStateOpen
    DoEvents
Loop
If conn2.State <> adStateOpen Then              'value is 1
    'timed out
Else
    'successful
End If

为了做到这一点&#34;正确&#34;,您可以处理ConnectionComplete事件。