2011-08-05 6 views
1

이전 VB6 앱을 지원하라고했습니다. (yay me) ADO 연결 시간 초과 속성에 문제가 있습니다. 아래의 방법은 서버가 있으면 제대로 작동하지만 서버가 존재하지 않거나 네트워크 연결이 시스템에서 시작되지 않으면 intTimeout을 1로 설정해도 30 초가 걸리므로 시간 초과가 발생합니다.서버가 없으면 ADO 연결 시간 제한을 더 빨리 설정하려면 어떻게합니까?

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 
+0

이름 확인에 문제가 있어야합니다. DNS 만 사용하고 (브로드 캐스트 + 시간 초과 없음) [SERVER]에 IP 주소를 직접 사용하여 TCP 속도를 높일 수 있습니다. 당신의 자리에서 나는이 "성능"문제로 너무 많은 것을 신경 쓰지 않을 것입니다. – wqw

답변

5

TCP 연결이 완료되면 ConnectionTimeout이 시작됩니다. 서버를 찾을 수 없으면이 값은 Windows TCP 하위 시스템에서 제어합니다.

이것이 정말로 문제가되는 경우, 먼저 상자를 ping하려고합니다. VB6을 통해 인터넷에 ping을 보내고 있습니다.

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 

이 그것을 할하려면 "제대로", 당신이 처리 할 수있는 ConnectionComplete 이벤트가있다.

관련 문제