检查Classic ASP中的连接是否正常

时间:2015-10-20 13:58:30

标签: 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

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

我只需要捕获错误代码。

2 个答案:

答案 0 :(得分:3)

VBScript错误处理

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

什么是Err对象?

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

当出现错误时,执行会暂停,那么Err是什么意思?

这是因为默认情况下错误会暂停脚本执行。但是,VBScript提供了一种机制来忽略这些错误,并通过移动到下一个可执行行并填充Err对象来继续执行。我们通过在我们希望执行忽略运行时错误的位置放置On Error Resume Next语句来实现此目的。

  

重要的是要记住On Error Resume Next只会忽略运行时错误。编译错误和语法错误仍将停止执行脚本。

所以我使用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
  

放置On Error Resume Next语句会重置Err对象,就像调用Err.Clear方法一样。

Classic ASP中的常用用法

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

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

    Err.Raise vbObjectError + 1, "My Custom App", "Connection not detected"
    
  • 您可能还想捕获可以使用ArrayScripting.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
    

有用的链接

答案 1 :(得分:0)

你可以在这里使用on error resume next,它基本上告诉你的脚本如果它抛出错误并从下一行继续跳过一行,通过检查err.number是否不等于{{1你可以捕获错误并从那里做你想做的任何事情。我会建议&#34;禁用&#34; 0当您完成后使用on error resume next将其保留并启用&#34;在整个代码中可能会导致一些不良结果。

以下是您的代码外观的简单示例:

on error goto 0
相关问题