ADO,ASP Errors集合和Error对象

来源:互联网 发布:网络设计工程师要求 编辑:程序博客网 时间:2024/06/07 18:37

Errors集合和Error对象

一 Errors集合

在程序调试和实地运行时,难免会发生错误。使用ADO对象时发生的运行错误都收集在Errors集合中。Connenction, RecordSet和Command对象都有它各自的Errors集合(使用语法为ObjectName.Errors)。Errors集合无须有Set语句创建,它有系统自动创建。如果没有错误,则它是一个空集合。如果非空,则其中每个成员是一个Error对象,

Errors集合只要一个属性—Count,它是长整数类型,表示Errors集合中错误的个数。如果错误存在,可以通过索引号index获得错误对象——Error对象。index的取值是从0到 XX.Errors.Count-1的一个长整数。获得错误对象有Errors集合的Item方法,语法如下:

Set 对象名 = XX.Errors.Item(index)

或简单地写成

Set 对象名 = XX.Errors(index)

例如:

Set MyError = Conn.Errors.Item(0)
Set MyError = rs.Errors(1)

Errors集合的另一个方法是Clear()。该方法用来清除Errors集合中的所有Error对象,使只成为空集。该方法无参数,语法:XX.Errors.Clear()。

二 Error对象

Error对象是发生“运行时错误”时由系统生成的对象,一个对象储存着一条错误的所有信息。Error对象没有“方法”,只有若干只读的属性用来储存错误信息。其中最重要的属性是Description,它包含了关于该错误的描述。想要获得错误信息,可在可能发生错误的语句后面捕获和显示错误。

On Error Resume Next
...
[对象XX的某个发生错误的语句]
if XX.Errors.Count>0 then
  Response.write "第1个错误是:" & XX.Errors(0).Description
End if

Error对象的其他几个属性是:

  • Number 长整数,内部错误码

  • Source 错误的来源,返回一ADO对象名

  • HelpFile 全面描述该错误的帮助文件名,如果有。

  • HelpContext 帮助文件的上下文ID。

  • SQLState SQL引擎产生的五个字母的错误状态码

  • NativeError OLE DB设置的错误码

三 错误对象的使用示例

示例1 演示捕获和显示一个错误。错误是SQL命令"select* from hello"中的表名不正确引起的。

<!-- demoErr1.asp --->
<Script Language="VBscript" RunAt="server">
Sub ErrHandle
 if conn.Errors.Count>0 then
   Response.write "<p><h4>系统发生了" & conn.Errors.Count & "个错误!</h4></p>"
   For i=0 to conn.Errors.Count-1
    Response.write "<p><h4>第" & i+1 & "个错误是:" & conn.Errors(i).Description & "</h4></p>"
   next
 else
  Response.write "<p><h4>ADO没有发生错误!</h4></p>"
 End if
End sub

On Error Resume Next
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=friends"
Conn.Execute "select* from hello" '设置错误,表HELLO不存在
ErrHandle
Conn.Execute "select* from " '语法错误,表名不存在
ErrHandle
Conn.Execute "select* from friends" '没有错误
ErrHandle
Set conn=nothimg
</Script>

代码注释

本例程用ErrHandle作为错误处理程序。产生错误的对象是一个Connection对象。

示例2 演示捕获和显示一个RecorsSet对象的错误。

<!-- demoErr2.asp --->
<Script Language="VBscript" RunAt="server">
Const adUseClient =2
Const adOpenStatic=3
Const adLockReadOnly=1
Sub ErrHandle
if ACError.Count>0 then
  Response.write "<p><h4>系统发生了" & ACError.Count & "个错误!</h4></p>"
  For i=0 to ACError.Count-1
    Response.write "<p><h4>第" & i+1 & "个错误是:" & ACError(i).Description & "</h4></p>"
  next
else
  Response.write "<p><h4>RecordSet没有发生错误!</h4></p>"
End if
End sub

On Error Resume Next
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open "select* from hello","DSN=friends" ,adOpenStatic,adLockReadOnly
'设置RS的错误,表HELLO不存在
rs.CursorLocation=adUseClient '查询数据返回客户端
Set ACError = rs.ActiveConnection.Errors '新对象,简化表达
ErrHandle
Set rs=nothimg
</Script>

代码注释

本例程中没有建立conn对象而直接建立rs对象,但错误确是连接信息不正确。所有错误集合是rs.ActiveConnection.Errors而不是rs.Errors。ActiveConnection应看作rs的字对象,它指向一个Conn对象。因此,本例程本质上不是一个RecorsSet对象的错误。

示例3 显示例1中错误对象的所有属性值。

<!-- demoErr3.asp --->
<Script Language="VBscript" RunAt="server">
Const adUseClient=3
Const adLockReadOnly=1
dim ss
On Error Resume Next
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "DSN=friends"
Conn.Execute "select* from hello" '设置错误,表HELLO不存在
if Conn.Errors.Count>0 then
 set thisError = Conn.Errors(0) '命名第一个错误对象
 ss = "错误号 No=" & thisError.Number &"<br>"
 ss = ss & "错误描述:<br><Font color=#ff0000>" & thisError.Description & "</font><br>"
 ss = ss & "错误来源 " & thisError.Source&"<br>"
 ss = ss & "Help文件 " & thisError.HelpFile&"<br>"
 ss = ss & "HelpContext " & thisError.HelpContext &"<br>"
 ss = ss & "SQL状态 " & thisError.SQLState &"<br>"
 ss = ss & "NativeError =" & thisError.NativeError &"<br>"
 Response.write ss
else
 Response.write "no Error"
End if
Set conn=nothimg
</Script>

这个例子让您直观地看看Error对象的各种属性值。

 
原创粉丝点击