帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > ASP编程
管理错误
作者:佚名 发布时间:2005-04-02 来源:不详
 处理数据存储时,发生错误的可能性总是存在的:安全性问题,试图更新已被其他用户删除的记录,诸如此类的问题很多。不能保证一切都运行良好,因此必须构建某种形式的错误控制。
    在第7章中,研究了ASP页面中一般的错误处理,但现在涉及的是数据存储,所以必须考虑使用额外的代码进行错误处理。先看一下Errors集合,再讨论其如何满足ASP 3.0的错误处理机制。

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对象的属性及说明


       这意味着循环过程现在可以变成这样:
       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 & _
                     "</TD></TR><TR><TD>NativeError</TD><TD>" & _
                     objError.NativeError & "</TD></TR>" & _
                     "<TR><TD>SQLState</TD><TD>" & objError.SQLState & _
                     "</TD></TR><TR><TD>Source</TD><TD>" & _
                     objError.Source & "</TD></TR>" & _
                     "<TR><TD>Description</TD><TD>" & _
                     objError.Description & "</TD></TR></TABLE><P>"
         CheckForErrors = True
       End If

    Next

Else
   CheckForErrors = False
End If

End Function
%>
这个程序检测是否有错误,如果有,则为每一个错误创建一个表格,并给出了如图8-11所示的结果。

这并不是一个技术含量较高的解决方案,但确实是用VBScript所能做到的最好的解决方案。真正的不足是必须自己检测错误。

8.6 小结
       现在,应该扩展基础知识,研究Command对象,理解如何使用一些高级特性去改进性能和维护ASP页面。
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·ADSI,使用ASP来完成NT管理  (2005-04-02)
 ·负载平衡环境下的ASP会话管理  (2005-04-02)
 ·ASP做象资源管理器的树形目录  (2005-04-02)
 ·ASP管理网页的自动随机密码方案  (2005-04-02)
 ·目录管理函数  (2005-04-02)
 ·用PHP开发qmail邮件服务器管理系  (2005-04-02)
 ·小虫新闻管理系统 V1.0  (2005-04-02)
 ·J2EE 探险者:持久数据管理  (2005-04-02)
 ·J2EE 应用程序中的数据管理和数据  (2005-04-02)
 ·本站论坛已整合帝国网站管理系统  (2005-03-22)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·在ASP中使用数据库
·使用ASP脚本技术
·通过启动脚本来感受ASP的力量
·学习使用ASP对象和组件
·解析asp的脚本语言
·初看ASP-针对初学者
·ASP开发10条经验总结
·ASP之对象总结
·ASP与数据库应用(给初学者)
·关于学习ASP和编程的28个观点
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统