注册 登录
编程论坛 VB6论坛

VB 连接 SQL 假死状态,等待几十秒才告知失败,第一次发贴,求大神们帮助!

zhuxingyuok 发布于 2014-06-13 18:28, 678 次点击
情况是这样的,VB连接SQL时,如果服务器没打开或IP地址错误时,需要等待很久才能提示连接失败,设置ConnectionTimeout 的值也不管用,我已经在百度上找遍了这样的答案都没有结果,有人说用下面的代码可以解决,但是我试了也不行。我想要的结果是如果连接不到服务器,在我指定的时间里(Cnn.ConnectionTimeout = 3' 秒)给出错误信息,不要一直像卡死一样的状态。请大神指点,很多朋友都需要这个答案。
网上代码如下
程序代码:
Private WithEvents Cnn As ADODB.Connection
Private Sub Command1_Click()
Set Cnn = New ADODB.Connection
On Error GoTo No
    Cnn.ConnectionTimeout = 3
    Cnn.Open "Provider=sqloledb;Data Source=123.112.234.222;Initial Catalog=master;User ID=sa;PassWord=sa;Options=adAsyncConnect"
    If Cnn.State = adStateOpen Then MsgBox "连接成功" Else MsgBox "连接失败"
Me.Command1.Enabled = True
Exit Sub
No:
    MsgBox Err.Description
    Err.Clear
End Sub
4 回复
#2
xzlxzlxzl2014-06-14 16:45
似乎没什么好方法,一般你可以事先用winsocket尝试连接1433端口,连接成功则表明sql server可正常访问,否则就不需要连接了(1433端口也是可变的,这只能向数据库管理员要了)
#3
bczgvip2014-06-14 19:57
Cnn.Open "Provider=sqloledb;Data Source=123.112.234.222;Initial Catalog=master;User ID=sa;PassWord=sa", , , adAsyncConnect
'异步打开连接。ConnectComplete 事件可用。
潜水一年多呐!虽然在其他地方咱也见过潜水十年的。数值单位没打错,确认。
#4
zhuxingyuok2014-06-23 10:13
回复 3 楼 bczgvip
版主你好!能详细点说一下么,我把你这行代码替换过去还是要等三四十秒呢?能不能给一段完整可行的代码,我真的很需要,非常感谢!
#5
bczgvip2014-06-24 18:17
程序代码:
Option Explicit

Private WithEvents Cnn As ADODB.Connection

Private Sub Cnn_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
    Debug.Print Cnn.ConnectionString
    Debug.Print pError.Description
    If adStateOpen = adStatus Then MsgBox "连接成功" Else MsgBox "连接失败"
End Sub

Private Sub Command1_Click()
    Set Cnn = New ADODB.Connection
On Error GoTo Errs
    Cnn.Mode = adModeRead
    Cnn.CursorLocation = adUseClient
    Cnn.ConnectionTimeout = 3
    Cnn.Open "Provider=sqloledb;Data Source=123.112.234.222;Initial Catalog=master;User ID=sa;PassWord=sa", , , adAsyncConnect
Errs:
End Sub
话说不是结贴了么?
timeout 没用,没找到原因。
1