连接超时会假死,客户以为是死机了呢,怎么办,我想做一个如出现这个情况就提示,并恢复到原来的状态的东东,怎么弄,
On Error GoTo e
    Set m_cn = New adodb.Connection
   ' m_cn.ConnectionTimeout = 25
    m_cn.Provider = "sqloledb.1"
    m_cn.Properties("data source").Value = Trim(servername)     '服务器的名字
    m_cn.Properties("initial catalog").Value = Trim(databasename)          '库名
    m_cn.Properties("Persist Security Info").Value = True
    m_cn.Properties("User ID").Value = Trim(username)  '用户名
    m_cn.Properties("Password").Value = Trim(Pass)   '密码
    m_cn.Open
    cn_open = True
    Exit Function
e:
    cn_open = False
    Set m_cn = Nothing

解决方案 »

  1.   

    ConnectionTimeout 属性
          指示在终止尝试和产生错误前建立连接期间所等待的时间。设置和返回值设置或返回指示等待连接打开的时间的长整型值(单位为秒)。默认值为 15。说明如果由于网络拥塞或服务器负载过重导致的延迟使得必须放弃连接尝试时,请使用 Connection 对象的 ConnectionTimeout 属性。如果打开连接前所经过的时间超过 ConnectionTimeout 属性上设置的时间,将产生错误,并且 ADO 将取消该尝试。如果将该属性设置为零,ADO 将无限等待直到连接打开。请确认正在对其编写代码的提供者会支持 ConnectionTimeout 功能。连接关闭时 ConnectionTimeout 属性为读/写,而打开时其属性为只读。
      

  2.   

    ConnectionString、ConnectionTimeout 和 State 属性范例
    该范例说明了使用 ConnectionString 属性打开 Connection 对象的不同方法。同时还使用 ConnectionTimeout 属性设置连接超时时间,并使用 State 属性检查连接的状态。该过程运行时需要 GetState 函数。Public Sub ConnectionStringX()   Dim cnn1 As ADODB.Connection
       Dim cnn2 As ADODB.Connection
       Dim cnn3 As ADODB.Connection
       Dim cnn4 As ADODB.Connection   ' 不使用数据源名 (DSN) 打开连接。
       Set cnn1 = New ADODB.Connection
       cnn1.ConnectionString = "driver={SQL Server};" & _
          "server=bigsmile;uid=sa;pwd=pwd;database=pubs"
       cnn1.ConnectionTimeout = 30
       cnn1.Open
       
       ' 使用 DSN 和 ODBC 标记打开连接。
       Set cnn2 = New ADODB.Connection
       cnn2.ConnectionString = "DSN=Pubs;UID=sa;PWD=pwd;"
       cnn2.Open
       
       ' 使用 DSN 和 OLE DB 标记打开连接。
       Set cnn3 = New ADODB.Connection
       cnn3.ConnectionString = "Data Source=Pubs;User ID=sa;Password=pwd;"
       cnn3.Open
       
       ' 使用 DSN 和单个参数而非连接字符串打开连接。
       Set cnn4 = New ADODB.Connection
       cnn4.Open "Pubs", "sa", "pwd"
     
       ' 显示连接的状态。
       MsgBox "cnn1 state: " & GetState(cnn1.State) & vbCr & _
          "cnn2 state: " & GetState(cnn2.State) & vbCr & _
          "cnn3 state: " & GetState(cnn3.State) & vbCr & _
          "cnn4 state: " & GetState(cnn4.State)   cnn4.Close
       cnn3.Close
       cnn2.Close
       cnn1.CloseEnd SubPublic Function GetState(intState As Integer) As String   Select Case intState
          Case adStateClosed
             GetState = "adStateClosed"
          Case adStateOpen
             GetState = "adStateOpen"
       End SelectEnd Function
      

  3.   

    ADO连接默认是采用阻塞模式的,如果暂时连接不到服务器,就会在超时允许值的时间内,一直等待和尝试连接。
    AOD默认超时是30秒,也就是说连接有问题,VB主线程就被卡30秒,而VB只有一个线程,所以看上去程序假死了。解决的方法有以下3种1、确定你的网络环境良好(如在局域网),可以将超时值尽量设置小一些。
    2、采用ADO异步连接方式,用定时器轮询或等待产生连接完成事件后,再进行后续操作。
    3、多线程。VB6的单线程模型注定了它无法稳定使用线程,但是可以采用变通的手段,如ActiveX EXE来产生线程,采用定时器轮询结果。
      

  4.   

    在超时语句下面加个timer,函数返回前加个timer