【问题标题】:VB6 ADODB.Connection Execute() Retry until successfulVB6 ADODB.Connection Execute() 重试直到成功
【发布时间】:2015-12-23 23:57:17
【问题描述】:

我正在尝试修复一个在空闲时间后似乎与数据库失去连接的小实用程序。我已经将超时设置为 0,但这似乎不起作用。

我想尝试重新建立连接并执行查询直到成功(我意识到这可能是对资源的错误使用),而不是简单地崩溃并显示一些错误消息,但即使那样我也是'我试图在这里完成。或者,如果可能,显示一个消息框,说明连接丢失,一旦建立连接,该消息框将关闭。

任何建议将不胜感激。

Public connMain As ADODB.Connection
Public rsMain As ADODB.Recordset 

......

Function Picture_Exists() As Boolean
On Error Resume Next 
sqlstr = "select * .... "
Set rsMain = connMain.Execute(sqlstr)

【问题讨论】:

  • 一些失败(也许是大多数)永远不会成功,所以这将是一个无限循环。
  • 请在您的问题的代码部分中提及整个 SQL 查询。

标签: vb6 adodb recordset


【解决方案1】:

您的连接可能由于未使用而在数据库端断开。在不使用时保持连接不是一个好习惯;连接在资源方面很昂贵,因此任何此类做法都无法很好地扩展。 Dbadmin 不太可能将未使用的连接打开很长时间。

您的潜在解决方案是尝试连接,如果您不能忽略错误。在这项业务中,我们不会经常说“从不”,但您永远不应该使用“On Error Resume Next”而不评估 Err.Number 是否等于 0(如果是,则没有错误)。这称为“内联错误处理”。

无论如何,我不会使用这种方法。我将评估 Connection 对象的State Property,如果它已关闭(cn.State = adoStateClosed),那么我将重新打开它。

【讨论】:

    【解决方案2】:

    您可以尝试以下方法:

    On Error Resume  ''''instead of On Error Resume Next
    
    Dim rsMain As New ADODB.Recordset
    sqlstr = "select * .... "
    If rsMain.State = adStateOpen Then rsMain.Close
    rsMain.Open sqlstr, sProvider, adOpenKeyset, adLockOptimistic
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      相关资源
      最近更新 更多