隆中对翻译:关于on error resume next滥用

来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 19:23:19
on error resume next 这条语句是用来屏蔽出错信息,当出错时,使得程序继续执行的,不过在使用中,似乎很多人没有考虑到on error resume next的作用范围.比如
<%
On Error Resume Next
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db.mdb")
If Err.Number<>0 Then Response.Write "数据库连接发生错误" : Response.End
Set Rs=conn.execute("Select * from 表")
Do While Not rs.eof
response.write rs(0)
rs.movenext
loop
%>
类似上面的代码,如果错误是发生在建立数据连接的时候,那么程序会按照我们设想的那样停止执行,给出出错信息,但假如是在set rs=conn.execute("select * from 表")这里出错呢?这个时候on error resume next仍然在起作用,这时候,一个占用cpu 100%的死循环就出现了,结果呢,如果服务器设置的好,那顶多你自己的站点无法访问了,如果服务器设置不够严格,那整个服务器的站点都要遭殃,结果就是空间商停掉你的空间.
代码改造一下
<%
Dim conn
Sub connect
On Error Resume Next
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db.mdb")
If Err.Number<>0 Then Response.Write "数据库连接发生错误" : Response.End
End sub
connect
Set Rs=conn.execute("Select * from 表")
Do While Not rs.eof
response.write rs(0)
rs.movenext
loop
%>
这样on error resume next就只作用于connect这个过程了,后面程序出错,不会因为on error resume next而带来死循环.
另外,on error resume next会屏蔽掉出错信息,在写程序的时候,尤其是初学者写程序的时候,很有可能因为这条语句的使用,使你忽略掉程序里隐藏的一些小错误.所以一定要慎用.
原文:http://readlog.cn/archives/?article-110.htm
On     Error     语句
启用或禁用错误处理程序。
On     Error     Resume     Next
On     Error     GoTo     0
说明
如果在您的代码中未使用     On     Error     Resume     Next     语句,     所发生的运行时错误     将显示错误信息,同时,代码的执行也随之终止。但是具体操作由运行代码的主机决定。主机有时可有选择地处理各类错误。在有些情况下,它可以在出错的地方激活脚本调试器。而在另一些情况下,     由于主机无法通知用户,因此对所发生的错误没有明确说明。至于如何处理错误则完全取决于主机的功能。
在任意一个特殊过程中,只要在调用堆栈的地方启用错误处理程序,所发生的错误一般不会是致命性的。如果在一个过程中没有启用局部错误处理程序,当发生错误时,控制可通过堆栈调用转移,直到找到一个具有错误处理程序的过程,并在出错的地方处理错误。如果在调用堆栈的过程中没有找到错误处理程序,则在出错的地方显示错误信息,同时终止代码执行,或者通过主机来正确处理错误。
On     Error     Resume     Next     会使程序按照产生错误的语句之后的语句继续执行,或是按照最近一次所调用的过程(该过程含有     On     Error     Resume     Next     语句)中的语句继续运行。这个语句可以不顾运行时错误,继续执行程序,之后您可以在过程内部建立错误处理例程。在调用另一个过程时,On     Error     Resume     Next     语句变为非活动的。所以,如果希望在例程中进行内部错误处理,则应在每一个调用的例程中执行     On     Error     Resume     Next     语句。
当调用另一过程时,禁止使用On     Error     Resume     Next     语句,因此如果您想在例程中嵌入错误处理程序,则需要在每次调用例程时都应执行     On     Error     Resume     Next     语句。当退出一个过程时,错误处理程序可恢复到它在进入所退出过程之前的状态。
如果您已启用     On     Error     Resume     Next     错误处理程序,则可使用     On     Error     GoTo     0禁用错误处理程序。
下面例子举例说明如何使用     On     Error     Resume     Next     语句:
On     Error     Resume     Next
Err.Raise     6       '产生溢出错误。
MsgBox     ("Error     #     "     &     CStr(Err.Number)     &     "     "     &     Err.Description)
Err.Clear           '清除错误。
类别:技术 |  | 添加到搜藏 | 分享到i贴吧 | 浏览(6522) | 评论 (4)
上一篇:ASP生成不重复的随机数    下一篇:生日快乐
相关文章:
引用 on error resume next用法On Error Resume Next 与 On Err...
On Error Resume Next是什么意思...vbScript on error resume next...
使用On Error Resume Next语句,O...On Error Resume Next 的用法
asp错误处理:on error resume ne...On Error语句 (On Error Resume ...
On Error Resume Nexton error resume next & on erro...
更多>>