mysql - 在经典 ASP 中检查连接是否正常

标签 mysql vbscript asp-classic adodb

有没有一种简单的方法来检查连接字符串是否成功连接到指定的数据库:

场景:

连接字符串示例:

ConnString="DRIVER={MySQL ODBC 5.1 Driver}; SERVER=###.###.####.##; PORT=3306; DATABASE=DbName; USER=DbUser; PASSWORD=DbUser_Pswrd; OPTION=3;"

如果上述操作失败,例如登录,因为 MySQL 服务器当前处于离线状态,或者有什么简单的方法可以检查是否存在问题,而不是像下面解释的那样抛出一般错误 80004005?

解决这个问题的方法是解决当页面加载时抛出的错误,其中代码中的以下行导致错误,因为连接无法连接到数据库:

rs.ActiveConnection = connString

我想在读取上述行之前捕获此连接问题,以便我可以重定向到没有连接字符串的页面并显示一条消息,说明服务器当前处于离线状态等。

我只需要捕获错误代码。

最佳答案

VBScript 错误处理

在 VBScript 中捕获错误的方法是使用 On Error Resume Next声明和Err内置于 VBScript 运行时的对象。

什么是Err对象?

Err对象用于包含有关在运行时引发的错误的信息,它始终包含最后引发的错误,并随着引发的更多错误不断覆盖自身。

当出现错误时,执行将停止,那么 Err 的意义何在? ?

这是因为默认错误会停止脚本执行。然而,VBScript 提供了一种机制来忽略这些错误并通过移动到下一个可执行行并填充 Err 来继续执行。目的。我们通过放置 On Error Resume Next 来做到这一点在我们希望执行时忽略运行时错误的语句。

It is important to remember that On Error Resume Next will only ignore runtime errors. Compilation Errors and Syntax Errors will still halt execution of a script.

所以我用的是On Error Resume Next如何捕获错误?

带有 If语句,一旦出现错误 Err对象将填充该错误并可以被询问。

On Error Resume Next
'Line we are checking for error. When an error occurs execution will 
'move to the next line, in this case the If Err.Number <> 0 Then.
rs.ActiveConnection = connString
If Err.Number <> 0 Then
  'Raise a custom error, output error to screen or perform some action.
  'Remember to clear the Err object before continuing.
  Err.Clear
End If
'We no longer want to ignore errors
On Error Goto 0

Placing the On Error Resume Next statement resets the Err object as if the Err.Clear method had been called.

经典 ASP 中的常见用法

  • 有时您可能想要检测特定错误并返回更友好的自定义响应,最简单的方法是从 If Err.Number <> 0 Then 构建响应声明。

    If Err.Number <> 0 Then
      Response.Write "Error (" & Err.Number & ") occurred: " & Err.Description
    End If
    
  • 一种更复杂的方法是引发您自己的错误,然后其他人可以在执行树上捕获该错误(取决于您的网络应用程序的复杂性)

    Err.Raise vbObjectError + 1, "My Custom App", "Connection not detected"
    
  • 您可能还想捕获错误列表,这可以通过使用 Array 来完成。或 Scripting.Dictionary对象而不是立即输出错误。

    Dim errors(), error_count
    Dim err_obj
    ...
    'This block could be repeated throughout the code for various
    'error checks.
    If Err.Number <> 0 Then
      ReDim Preserve errors(error_count)
      errors(error_count) = Array(Err.Number, Err.Description)
      error_count = error_count + 1
    End If
    ...
    'Output errors
    If IsArray(errors) Then
      Response.Write "<p>" & error_count & " error(s) have been detected</p>"
      Response.Write "<ol>"
      For Each err_obj In errors
        Response.Write "<li>Error: " & err_obj(0) & " - " & err_obj(1) & "</li>"
      Next
      Response.Write "</ol>"
    End If
    
  • 检测可以使用 Select 返回的各种错误代码语句而不是使用经典的 If声明方法,像这样;

    Select Case Hex(Err.Number)
    Case &H800A0006
      'Overflow error
    Case &H800A000B
      'Division by zero error
    Case Else
      'Anything else
    End Select
    

有用的链接

关于mysql - 在经典 ASP 中检查连接是否正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33238741/

相关文章:

mysql - 无法在 MYSQL 中添加或更新子行,约束键失败

php - Mysql INSERT SET类型

vbscript - 没有 ... 移位运算符时的移位

javascript 不更新模态弹出窗口上的 css 属性

php - 我找不到包含 PHP MySQL native 驱动程序 (mysqlnd) 的 CentOS 6.6 存储库

mysql - 我的 MySQL AWS RDS 实例中的这些意外数据库是什么?

vbscript - VBS FileSystemObject.DeleteFolder路径不存在,但FileSystemObject.FolderExists为true

html - 使用 VBScript 捕获 HTA 窗口关闭事件

asp-classic - 或 vbscript 中的运算符

asp.net-mvc - 预编译 MVC Web 应用程序