标题:VB 连接 SQL 假死状态,等待几十秒才告知失败,第一次发贴,求大神们帮助!
只看楼主
zhuxingyuok
Rank: 2
等 级:论坛游民
帖 子:4
专家分:25
注 册:2012-11-13
结帖率:0
已结贴  问题点数:20 回复次数:4 
VB 连接 SQL 假死状态,等待几十秒才告知失败,第一次发贴,求大神们帮助!
情况是这样的,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
搜索更多相关主题的帖子: IP地址 百度 服务器 朋友 网上 
2014-06-13 18:28
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:10 
似乎没什么好方法,一般你可以事先用winsocket尝试连接1433端口,连接成功则表明sql server可正常访问,否则就不需要连接了(1433端口也是可变的,这只能向数据库管理员要了)
2014-06-14 16:45
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
得分:10 
Cnn.Open "Provider=sqloledb;Data Source=123.112.234.222;Initial Catalog=master;User ID=sa;PassWord=sa", , , adAsyncConnect
'异步打开连接。ConnectComplete 事件可用。
潜水一年多呐!虽然在其他地方咱也见过潜水十年的。数值单位没打错,确认。
2014-06-14 19:57
zhuxingyuok
Rank: 2
等 级:论坛游民
帖 子:4
专家分:25
注 册:2012-11-13
得分:0 
回复 3 楼 bczgvip
版主你好!能详细点说一下么,我把你这行代码替换过去还是要等三四十秒呢?能不能给一段完整可行的代码,我真的很需要,非常感谢!
2014-06-23 10:13
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
得分:0 
程序代码:
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 没用,没找到原因。
2014-06-24 18:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-432893-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015619 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved