帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > ASP.NET编程 >
错误处理程序
作者:佚名 发布时间:2005-04-02 来源:不详
 


    前面所提的Trace 的确是很方便,不过它只能针对程序开发时或维护时使用。而在执行程序时常因为使用者操作错误或程序写作不周详,而发生发生执行时期错误(Runtime Error)。此时如果让使用者的浏览器显示错误的讯息,那么对于网站的形象就会造成负面的影响。所以网页开发时我们必须假设所有使用者会发生的错误,并且撰写程序来处理这些错误;这个处理错误的程序称为「错误处理法则」。VB.NET 支持了两种错误处理法则,一个是从以前的VB 就支持的On ErrorGoto 叙述,另一个是全新的Try...Catch 叙述。这两种比较起来以Try...Catch 较结构化,但是On Error Goto 的使用较为简单,两者各有利弊。

On Error Goto 叙述
OnError 错误处理法则大约分为三个步骤:
    1. 开启错误捕捉码,指定错误发生时应该执行哪些程序代码。
    2. 撰写修正错误的程序。
    3. 结束错误处理继续执行正常的程序。


    在介绍On Error Goto 叙述之前我们先了解Err 对象。当程序发生错误时,所有和错误相关的讯息都会被纪录在这个对象里;我们能利用Err 对象来检视目前发生错误的错误讯息、错误代码及简述,或是用来引发一个自订的错误。Err 对象的属性如下所示:



Err 对象的方法如下所示:

致能错误捕捉
    接着我们要介绍如何建立错误处理法则。首先我们在程序的开始处输入「On Error Goto 标注」来致能错误捕捉的功能,并指定程序发生错误时程序代码要转移的错误处理法则。下列程序代码片段将错误捕捉打开,并指定程序发生错误时会跳到标签「ErrHandler」来执行错误处理法则:

Sub 程序名称(Sender As Object, e As EventArgs)
On Error Goto ErrHandler
...
Exit Sub
ErrHandler:
错误处理码...
...
跳出错误处理法则
End Sub

????

    上述程序代码片段中,我们输入叙述OnError Goto...开启错误捕捉,并指定发生错误时跳至ErrHandler 标签处执行错误处理法则;卷标的宣告只要在卷标名后加上冒号「:」即可。我们在程序的最后面的地址将错误处理法则加入,并且在错误处理法则标号前加Exit Sub 叙述;这是因为程序是逐行执行的,倘若没有发生任何错误还是会跳入错误处理法则执行错误处理的工作。所以我们在错误处理法则标号前加入Exit Sub 叙述,以避免没有发生错误时跳入错误处理法则中执行错误处理码;如果我们执行的程序是Function 程序时,在错误处理法则前要加入的 叙述为Exit Function

跳出错误处理法则
    在错误处理法则中程序的执行遇到End Sub 或End Function 叙述时便结束程序的执行。若我们要让程序回到程序中继续执行,则要使用Resume 叙述。Resume 叙述的使用有三种方式,如下表所示:

    在ASP.NET 中使用第一种Resume 时要特别注意,这种Resume 叙述最主要用在一般的Windows 应用程序上,倘若在ASP.NET 中使用Resume 叙述会导致无穷循环。因为ASP.NET回到错误的那一行后会将原本发生错误的程序代码再执行一次,接着又进入错误处理程序,如此反复进行下去成为无穷循环。下列范例我们建立一个具有完整错误处理法则的网页:

<Html>
<Form Runat="Server">
<ASP:TextBox Id="Text1" Runat="Server"/>X
<ASP:TextBox Id="Text2" Runat="Server"/>
<ASP:Button Id="Button1" Text="=" OnClick="Button1_Click"
Runat="Server"/>
<ASP:Label Id="Label1" Runat="Server"/><p>
<ASP:Label Id="Label2" Runat="Server"/>
</Form>
<Script Language="VB" Runat="Server">
Sub Page_Load(Sender As Object,e As Eventargs)
Label1.Text=""
Label2.Text=""
End Sub
Sub Button1_Click(Sender As Object,e As EventArgs)
On Error Goto ErrHandler '将错误捕捉打开
Label1.Text=Cint(Text1.Text)/Cint(Text2.Text)
Exit Sub
ErrHandler:
If Err.Number=13 Then '如果发生错误码为13
Label2.Text=Err.Description & "<br>两边都必须输入数字!"
Resume Next '回到发生错误行的下一行
End If
End Sub
</Script>
</Html>



    当Text1 及Text2 中都输入数值则显示正常的结果,但如果其中任一个TextBox 输入非数值型态的数据便引发一个错误;此时程序会跳到ErrHandler 卷标处执行错误处理法则。而非数字型态的值做型态转换会引发代码为13 的错误,所以我们可以使用If 叙述判断,当Err 对象的Number属性为13 时,Label2 将会显示「两边都必须输入数值」,接着回到发生错误的下一行继续执行。

Tips
    关于错误码以及其错误的讯息,如果你有MSDN(Microsoft Developer Network) Library 光盘,可以查询其中的「Trappable Errors」议题,或是浏览微软MSDN 的官方网站「Http://msdn.microsoft.com/library/default.asp 」在线查询,或是执行ErrCode.aspx 范例程序可以列出错误码以及错误描述。


MSDN Online Library

    
错误码以及错误描述
 
 
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·在ASP中常见的错误80004005信息和  (2005-03-12)
 ·大部分的ADO的错误码对应的含义  (2005-03-12)
 ·让IIS 5.0的错误信息提示更详细的  (2005-03-12)
 ·浅谈asp编程中的测试打印、有效性  (2005-03-12)
 ·Web网站的错误控制(转)  (2005-03-12)
 ·“无法指出的错误”——连接字符  (2005-03-12)
 ·ASP中的错误代码技巧  (2005-03-12)
 ·错误“操作必须使用一个可更新的  (2005-03-12)
 ·ADO 错误代码  (2005-03-12)
 ·Internet Explorer 错误代码  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·放眼未来 帝国近期将有重大举措!
·PHPWind6.3.2版通行证发布
·帝国备份王2008版正式发布
·帝国备份王2008版发布
·phpcms2007转帝国CMS5.0程序发布
·dedecms5.1转帝国CMS5.0程序发布
·帝国网站管理系统V5.0商业购买说明
   类别最新
·ASP.NET中为DataGrid添加合计字段
·.text urlRewrite介绍
·利用 ASP.NET 的内置功能抵御 Web
·ASP.NET Cache
·用 WebClient.UploadData 方法 上载
·ASP.NET 程序设计-序
·什么是客户端/伺服端(Client/Serve
·因特网应用程序的开发
·网页的种类
·.NET Framework-Microsoft Visual
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统