通过ADODB连接oracle数据库,虽然设置了ConnectionTimeout 、CommandTimeout ,但是数据库暂停或关闭的时候,仍然会长时间没有反应,并不返回错误。问下,这种情况下如何来判断是否超时呢??Private dbCon  As ADODB.Connection
Private dbCommand As ADODB.Command
Private dbRS As ADODB.RecordsetPrivate Sub Command1_Click()
    Dim strCon As String
    Dim errloop As ADODB.Error
    
    On Error GoTo Err_Execute
    
    strCon = "Provider=OraOLEDB.Oracle.1;Password=system;Persist Security Info=True;User ID=system;Data Source=oracle74;Extended Properties="""
    Set dbCon = New ADODB.Connection
    dbCon.ConnectionTimeout = 5
    dbCon.CommandTimeout = 5
    dbCon.Open strCon
    MsgBox "链接成功!"
    Exit Sub
Err_Execute:
    '//错误处理
    MsgBox "链接失败!"
End SubPrivate Sub Command2_Click()
    Dim n As Long
    
    On Error GoTo Err_Execute
    
    Set dbCommand = New ADODB.Command
    Set dbRS = New ADODB.Recordset    Set dbCommand.ActiveConnection = dbCon
    dbCommand.Prepared = False
    dbCommand.CommandText = "select * from testlob"
    dbCommand.CommandTimeout = 5
    
    Set dbRS = dbCommand.Execute
    n = dbRS.Fields.Count
    Text1.Text = "字段个数:" & n
    Exit Sub
Err_Execute:
    '//错误处理
End Sub

解决方案 »

  1.   

    在數據庫也設置一個timeout時間
      

  2.   

    if err.number=91 then
    msgbox "数据库连接超时"
    endif
      

  3.   

    to zyg0:你这个要怎么用呢??比如说在执行下边这条语句的时候没有响应了。放到错误处理里肯定不行了,我的问题就是因为它一直没有响应,不抛出错误。
    Set dbRS = dbCommand.Execute直接在这个下边写??
    Set dbRS = dbCommand.Execute
    if err.number=91 then
       msgbox "数据库连接超时"
    endif
    我试了一下,好像也不行。
      

  4.   

    //我的问题就是因为它一直没有响应
    //    dbCommand.CommandText = "select * from testlob"是不是testlob记录太多 所以耗时间?
    单独在数据库中如果是ms sql 在查询分析器里运行   select * from testlob 时间长么?
      

  5.   

    select * from testlob 这个语句执行时间不长,在正常情况下不到1秒就可以执行完。
    问题是数据库暂停的时候,它一直在那里连接数据库,即使超时了也不报错。