ASP 3.0高级编程(四十)
程序员文章站
2022-03-26 09:22:56
8.5.1 errors集合
errors集合包含由单个ado命令的执行而引起的每一个错误的error对象。使用e...
8.5.1 errors集合
errors集合包含由单个ado命令的执行而引起的每一个错误的error对象。使用errors集合的原因是由于在一个命令的执行过程中,可能会引起多个错误,ole db提供者需要提供一种方式通知客户方已有多个错误发生。
关于errors集合有两个重要的地方需要注意:
· 每次执行ado命令,如果发生错误,就清空错误集,同时代之以新的错误内容。当然,如果没有错误发生,errors集合不会受到影响。所以,即使ado命令成功执行,这个集合中也可能含有错误信息。
· ole db提供者可能会将包含信息的消息或警告装入errors集合,错误号为0。所以不能只检查集合中的错误号而假定错误已经发生。比如,使用odbc提供者与sql server连接,可能会得到一个“错误”,告知缺省的已经改变了。
如果回头看一下本章开始讲到的对象模型,可能会发现errors集合只能由connection对象访问。读者可能会觉得奇怪,如果不显式地创建一个connection对象,如何访问errors集合?recordset对象有一个activeconnection属性,含有当前记录集的connection对象,这意味着可以这样得到errors集合:
rsauthors.activeconnection.errors
如果想看发生的全部错误,则需要遍历整个errors集合:
for each errauthors in rsauthors.activeconnection.errors
display error
next
为了显示一些合理的错误信息,需要确切知道在errors集合中到底有些什么。
error对象包含表8-5所示的属性:
表8-5 error对象的属性及说明
属 性
说 明
number
ado错误号
nativeerror
从数据提供者获得的错误号
sqlstate
连接到sql数据库时,5位的sql状态代码
source
引起错误的对象
description
错误说明文本
这意味着循环过程现在可以变成这样:
for each errauthors in rsauthors.activeconnection.errors
response.write "number: " & errauthors.number & _
"<br>nativeerror: " & errauthors.nativeerror & _
"<br>sqlstate: " & errauthors.sqlstate & _
"<br>source: " & errauthors.source & _
"<br>description: " & errauthors.description & _
"<p>"
next
8.5.2 asp页面中的ado错误
在第4、7章,我们研究了asp的错误,以及如何简洁并彻底地处理这些错误。asp 3.0的一个新特征就是自定义错误页面,但这对于ado确实用处不大,因为脚本中的变量无法传入自定义的错误页面。这就意味着我们无法检测errors集合。
面对这样的情况,必须提供自己的错误处理。如果你使用jscript作为服务器端语言,那么你将拥有新的try/catch特性,但是vbscript对于错误的处理仍然有许多不足。目前,最好的检测错误的方法是使用on error resume next语句,然后在可能会引起错误的每一行ado代码后检查errors集合。就像这样:
<%
on error resume next
dim rsauthors
dim strsql
set rsauthors = server.createobject("adodb.recordset")
strsql = "select missingcolumn1, missingcolumn2, au_lname, au_fname " & _
"from authors"
rsauthors.open strsql, strconn, adopendynamic, adlockoptimistic, adcmdtext
if checkforerrors (rsauthors.activeconnection) = false then
while not rsauthors.eof
response.write rsauthors("au_lname") & ", " & _
rsauthors("au_fname") & "<br>"
rsauthors.movenext
wend
end if
rsauthors.close
set rsauthors = nothing
%>
这里可使用checkforerrors子程序来检测是否有错误发生:
function checkforerrors(objconn)
dim objerror error object
errors means the count will be greater than 0
if objconn.errors.count > 0 then
loop through the errors
for each objerror in objconn.errors
eorros with number 0 are informational
if objerror.number <> 0 then
response.write "<table border=1>" & _
"<tr><td>error property</td><td>contents</td>" & _
"</tr><tr><td>number</td><td>" & objerror.number & _
&n
errors集合包含由单个ado命令的执行而引起的每一个错误的error对象。使用errors集合的原因是由于在一个命令的执行过程中,可能会引起多个错误,ole db提供者需要提供一种方式通知客户方已有多个错误发生。
关于errors集合有两个重要的地方需要注意:
· 每次执行ado命令,如果发生错误,就清空错误集,同时代之以新的错误内容。当然,如果没有错误发生,errors集合不会受到影响。所以,即使ado命令成功执行,这个集合中也可能含有错误信息。
· ole db提供者可能会将包含信息的消息或警告装入errors集合,错误号为0。所以不能只检查集合中的错误号而假定错误已经发生。比如,使用odbc提供者与sql server连接,可能会得到一个“错误”,告知缺省的已经改变了。
如果回头看一下本章开始讲到的对象模型,可能会发现errors集合只能由connection对象访问。读者可能会觉得奇怪,如果不显式地创建一个connection对象,如何访问errors集合?recordset对象有一个activeconnection属性,含有当前记录集的connection对象,这意味着可以这样得到errors集合:
rsauthors.activeconnection.errors
如果想看发生的全部错误,则需要遍历整个errors集合:
for each errauthors in rsauthors.activeconnection.errors
display error
next
为了显示一些合理的错误信息,需要确切知道在errors集合中到底有些什么。
error对象包含表8-5所示的属性:
表8-5 error对象的属性及说明
属 性
说 明
number
ado错误号
nativeerror
从数据提供者获得的错误号
sqlstate
连接到sql数据库时,5位的sql状态代码
source
引起错误的对象
description
错误说明文本
这意味着循环过程现在可以变成这样:
for each errauthors in rsauthors.activeconnection.errors
response.write "number: " & errauthors.number & _
"<br>nativeerror: " & errauthors.nativeerror & _
"<br>sqlstate: " & errauthors.sqlstate & _
"<br>source: " & errauthors.source & _
"<br>description: " & errauthors.description & _
"<p>"
next
8.5.2 asp页面中的ado错误
在第4、7章,我们研究了asp的错误,以及如何简洁并彻底地处理这些错误。asp 3.0的一个新特征就是自定义错误页面,但这对于ado确实用处不大,因为脚本中的变量无法传入自定义的错误页面。这就意味着我们无法检测errors集合。
面对这样的情况,必须提供自己的错误处理。如果你使用jscript作为服务器端语言,那么你将拥有新的try/catch特性,但是vbscript对于错误的处理仍然有许多不足。目前,最好的检测错误的方法是使用on error resume next语句,然后在可能会引起错误的每一行ado代码后检查errors集合。就像这样:
<%
on error resume next
dim rsauthors
dim strsql
set rsauthors = server.createobject("adodb.recordset")
strsql = "select missingcolumn1, missingcolumn2, au_lname, au_fname " & _
"from authors"
rsauthors.open strsql, strconn, adopendynamic, adlockoptimistic, adcmdtext
if checkforerrors (rsauthors.activeconnection) = false then
while not rsauthors.eof
response.write rsauthors("au_lname") & ", " & _
rsauthors("au_fname") & "<br>"
rsauthors.movenext
wend
end if
rsauthors.close
set rsauthors = nothing
%>
这里可使用checkforerrors子程序来检测是否有错误发生:
function checkforerrors(objconn)
dim objerror error object
errors means the count will be greater than 0
if objconn.errors.count > 0 then
loop through the errors
for each objerror in objconn.errors
eorros with number 0 are informational
if objerror.number <> 0 then
response.write "<table border=1>" & _
"<tr><td>error property</td><td>contents</td>" & _
"</tr><tr><td>number</td><td>" & objerror.number & _
&n
上一篇: 使用淘宝镜像cnpm安装Vue.js的图文教程(转载)
下一篇: CSS3网格布局基础知识