首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> Visual Basic教程
Visual Basic .NET中的异常处理简介(下)-.NET教程,VB.Net语言
作者:网友供稿 点击:387
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
visual basic .net中的异常处理简介(下)

作者:microsoft  
  非结构化异常处理
  非结构化异常处理通过 err 对象和以下三种语句来实现:on error、resume 和 error。on error 语句创建单个异常处理程序以捕捉发生的所有异常,您可以在以后改变处理程序的位置,但一次只能有一个处理程序。此方法可以跟踪最近产生的异常和最近的异常处理程序的位置。在方法开始时,异常和异常处理程序的位置都设置为 nothing。
  要在代码中生成运行时错误,请使用 raise 方法。每次在错误处理例程中发生 exit sub、exit function、exit property、resume 或 resume next 语句时,err 对象的属性都将重置为零或零长度字符串。在错误处理例程外部使用上述任何语句都不会重置其属性。如果确实需要重置属性,可以使用 clear 方法重置 err 对象。  error 对象
  err 对象属性的值由刚刚发生的错误决定。下表列出了该对象的属性及其简单说明。 属性 说明
description 对错误进行简单说明的文本消息。
helpcontext 整数,包含帮助文件中某个主题的上下文标识符。
helpfile 字符串表达式,包含帮助文件的完全限定路径。
lastdll 由于调用动态链接库 (dll) 而产生的系统错误代码。此 dll 是发生错误之前最后调用的 dll。
number 指定错误的数值。
source 字符串表达式,代表产生错误的对象或应用程序。

  下面的示例显示了如何在非结构化错误处理中使用上述某些属性: on error resume next
err.clear
err.raise(33333)
err.description = "您没有输入数字!"
msgbox(err.number)
msgbox(err.description)
msg = "请按 f1 或“帮助”查看 " & err.helpfile & " 中有关以下帮助内容的" & _
"主题:" & err.helpcontext
msgbox(msg)

  on error goto 语句
  on error goto 语句启用异常处理的某个例程,并指定该例程在此过程中的位置。它使用标签或行号,指出特定异常处理例程在代码中的位置。使用 -1 时,在过程内部禁用错误处理。使用 0 时,禁用当前异常。如果没有 on error 语句,并且在当前调用堆栈中所有方法均未处理异常,则发生任何运行时错误都将是致命的:执行过程停止并显示错误消息。
  下表列出了 on error goto 语句可能使用的方法。 语句 任务
on error goto -1 将 err 对象重置为 nothing,从而在例程中禁用错误处理
on error goto 0 将最后的异常处理程序位置重置为 nothing,从而禁用异常
on error goto <标签名> 将指定标签设置为异常处理程序的位置
on error resume next 创建 resume next 行为,作为最近的异常处理程序的位置

  resume 和 resume next
  resume 语句本身可以将控制权返回导致异常的语句。执行过程将返回到最初产生异常的那一行。
  相比较而言,resume next 语句将在发生异常后恢复执行过程。该语句指定,在异常事件中,控制权将传递给紧接发生异常语句之后的语句。resume next 的使用可允许出现不太严重的失败。引发错误的语句失败,但应用程序将继续执行,且允许用户改正错误并继续进行操作。与此类似,resume <标签> 将控制权传递给在其 line 参数中指定的标签。确保行标签与调用它的代码位于相同的过程中,因为它不能跨函数使用。
  resume 在错误处理例程中必须单独使用。它在这种例程的外部引发错误。  error 语句
  visual basic .net 支持 error 语句仅仅是为了保持向后兼容。在新代码中,使用 err 对象的 raise 方法生成运行时错误。  非结构化异常处理示例
  以下示例是非结构化错误处理的一种基本方法。当 flawlesscode 遇到错误时,执行过程将转移到 whoops,它为用户提供该错误的有关信息(主要包含在 err 对象的 description 属性中的信息): private sub flawlesscode()
on error goto whoops
  代码要做很多事情,不要过多
  地研究错误处理代码。
  return
whoops:
为用户提供错误信息。
  msgbox ("意外错误:" & err.description)
  return
end sub

  以下示例显示了如何使用 err 对象构造错误消息对话框。 dim errormessage as string
如果发生错误则构造错误消息。
on error resume next
err.raise (13) 生成“类型不匹配”错误。
查看是否出现错误。如果是,则显示消息。
if err.number <> 0 then
  errormessage = "错误 #" & str(err.number) & " 原因是" _
   & err.source & vbcrlf & err.description
将该消息显示为关键消息。
  msgbox(errormessage, msgboxstyle.critical, "错误")
end if
  总结
  到现在为止,您应该清楚地了解了结构化异常处理和非结构化异常处理之间的区别,以及 visual basic .net 中结构化异常处理功能的优势。通常情况下,结构化异常处理即可满足您的需求,但在少数情况下仍然可能需要使用非结构化异常处理。
  在确保异常得到处理的同时,不要过多地列举它们,否则会导致性能下降。try 结构是很有条理的,易于编写且易于阅读,它能生成有效的代码。编写处理一个或多个可能异常的代码时,都应该使用该结构。此方法极其有效,您甚至愿意在正常情况下使用异常来控制逻辑流程。例如,替代 if 或 select 语句。处理异常是很有效的,但应该到真正发生异常时使用。
  下表列出了预定义的异常类及其起因和派生类。
表 1 异常类 产生原因 派生类
appdomainunloadedexception 尝试访问未加载的应用程序域 无
argumentexception 为方法提供的一个或多个参数无效 argumentnullexception
argumentoutofrangeexception
componentmodel.invalidenum
argumentexception
duplicatewaitobjectexception
arithmeticexception 在算法、强制类型转换或转换操作上发生错误 dividebyzeroexception
notfinitenumberexception
overflowexception
arraytypemismatchexception 尝试在数组中存储错误类型的元素 无
badimageformatexception dll 或可执行程序的文件映像无效 无
cannotunloadappdomainexception 尝试卸载应用程序域失败 无
componentmodel.design.serialization.
codedomserializerexception 产生序列化错误的行号信息 无
componentmodel.licenseexception 无法为组件授予许可证 无
componentmodel.warningexception 异常被作为警告而不是错误处理 无
configuration.configurationexception 配置设置中发生错误 无
configuration.install.installexception 在安装过程的提交、回滚或卸载阶段发生错误 无
contextmarshalexception 尝试通过上下文范围封送对象失败 无
data.dataexception 使用 ado.net 组件时产生错误 data.constraintexception
data.deletedrowinaccessibleexception
data.duplicatenameexception
data.inrowchangingeventexception
data.invalidconstraintexception
data.invalidexpressionexception
data.missingprimarykeyexception
data.nonullalllowedexception
data.readonlyexception
data.rownotintableexception
data.stringtypingexception
data.typeddatasetgeneratorexception
data.versionnotfoundexception
data.dbconcurrencyexception 在升级操作中,dataadapter 确定受影响的行数等于零 无
data.sqlclient.sqlexception sql server 返回警告或错误 无
data.sqltypes.sqltypeexception data.sqltypes 的异常基类 data.sqltypes.sqlnullvalueexception
data.sqltypes.sqltruncateexception
drawing.printing.
invalidprinterexception 使用无效的打印机设置尝试访问打印机 无
enterpriseservices.
registrationexception 检测到注册错误 无
enterpriseservices.serviced
componentexception 在运行的组件上检测到错误 无
executionengineexception 在公共语言运行时的执行引擎上存在内部错误 无
formatexception 参数的格式不符合调用方法的参数规定 net.cookieexception
reflection.customattribute
formatexception
uriformatexception
indexoutofrangeexception 尝试访问其索引在数组范围之外的数组元素 无
invalidcastexception 无效的强制类型转换或显式转换 无
invalidoperationexception 方法调用对于对象的当前状态无效 net.protocolviolationexception
net.webexception
objectdisposedexception
invalidprogramexception 程序包含无效的 microsoft 中间语言或元数据 无
io.internalbufferoverflowexception 内部缓冲区溢出 无
io.ioexception 发生 i/o 错误 io.directorynotfoundexception
io.endofstreamexception
io.fileloadexception
io.filenotfoundexception
io.pathtoolongexception
management.managementexception 管理错误 无
memberaccessexception 尝试访问类成员失败 fieldaccessexception
methodaccessexception
missingfieldexception
missingmemberexception
missingmethodexception
multicastnotsupportedexception 尝试组合两个无法组合的代理类型实例,两者的操作数都为非空引用 无
notimplementedexception 未执行要求的方法或操作 无
notsupportedexception 不支持所调用的方法,或者尝试在不支持所调用函数的流中进行读取、查找或写入 platformnotsupportedexception
nullreferenceexception 尝试取消引用空对象引用 无
outofmemoryexception 内存不足以完成执行程序 无
rankexception 将具有错误维数的数组传递给方法 无
reflection.ambiguousmatch
exception 绑定方法时导致多个方法符合绑定条件 无
reflection.reflectiontype
loadexception module.gettypes 方法导致模块中的一个或多个类无法加载 无
resources.missingmanifest
resourceexception 主要程序集不包含非特定语言的资源,但它们又是必需的,因为缺少合适的辅助程序集 无
runtime.interopservices.
externalexception 所有 com 互操作异常和结构化异常处理异常的基本异常类型 componentmodel.design.
checkoutexception
componentmodel.win32exception
data.oledb.oledbexception
messaging.messagequeueexception
runtime.interopservices.comexception
runtime.interopservices.sehexception
web.httpexception
runtime.interopservices.
invalidcomobjectexception 使用了无效的 com 对象 无
runtime.interopservices.
invalidolevarianttypeexception 封送器遇到无法封送到管理代码的变体类型参数 无
runtime.interopservices.
marshaldirectiveexception 封送器遇到不支持的 marshalasattribute 无
runtime.interopservices.
safearrayrankmismatchexception 传入 safearray 的名次与管理签名中指定的名次不匹配 无
runtime.interopservices.
safearraytypemismatchexception 传入 safearray 的类型与管理签名中指定的类型不匹配 无
runtime.remoting.remotingexception 远程操作时发生错误 runtime.remoting.remoting
timeoutexception
runtime.remoting.serverexception 用于在客户端连接到无法产生异常的非 .net 框架应用程序时传递异常 无
runtime.serialization.
serializationexception 序列化或反序列化过程中发生错误 无
security.crytography.
cryptographicexception 加密操作过程中发生错误 security.cryptography.
cryptographicunexpected
operationexception
security.policy.policyexception 策略禁止代码运行 无
security.securityexception 检测到安全性错误 无
security.verificationexception 安全策略要求代码的类型安全,而验证程序无法验证代码是否类型安全 无
security.xmlsyntaxexception xml 分析时出现语法错误 无
serviceprocess.timeoutexception 指定的超时已过期 无
stackoverflowexception 待定的方法调用太多,导致执行堆栈溢出 无
threading.synchronizationlockexception 在代码的异步块中调用同步方法 无
threading.threadabortexception 调用 abort 方法 无
threading.threadinterruptedexception 在 waitsleepjoin 状态时线程中断 无
threading.threadstateexception 方法调用的无效 threadstate 中的线程 无
typeinitializationexception 围绕类初始化程序产生的异常而产生的包装 无
typeloadexception 类型加载失败 dllnotfoundexception
entrypointnotfoundexception
typeunloadedexception 尝试访问已卸载的类 无
unauthorizedaccessexception 操作系统拒绝访问,因为存在 i/o 错误或特定类型的安全性错误 无
web.services.protocols.soapexception 在 soap 上调用 xml web 服务方法而导致错误 web.services.protocols.
soapheaderexception
xml.schema.xmlschemaexception    无
xml.xmlexception    无
xml.xpath.xpathexception 处理 xpath 表达式时发生错误 无
xml.xsl.xsltexception 处理可扩展样式表语言 (xsl) 转换时发生错误 system.xml.xsl.xsltcompileexception

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·ASP.net中动态加载控件时一些问题的总结-ASP教程,ASP应用
·C#读写注册表-.NET教程,C#语言
·Visual Basic .NET中的异常处理简介(下)-.NET教程,VB.Net语言
·C#:文件的按行读/写及文件目录对话框的使用-.NET教程,C#语言
·ADO.Net:使用DataReader向数据库中插入数据-ASP教程,数据库相关
·列一张网恋赔偿清单(爆笑)
·如何用Photoshop画服装款式图-网页设计,Photoshop
·.NET下使用DataAdapter保存数据时,如何生成command语句及使用事务-.NET教程,数据库应用
·新型dc/dc电源控制芯片dpa426的应用
·ASP.NET 2.0 - Enter Key - Default Submit Button-.NET教程,Asp.Net开发
最新文章
·个人站长的网络赚钱两条新出路_网赚技巧
·adsense帐户最佳化纵深谈-adsense资深专员_网赚技巧
·google adsense容易被k的可能性列表_网赚技巧
·如何让程序被站长接受和产生利润_站长访谈
·马云,即成的中国互联网第4代霸主_站长访谈
·google关键词广告创建的十二招_google推广
·如何使google更快速收录你的新站_google推广
·几个颇有创意的网站推广方法_站长心得
·网络编辑:标题,如何让网民一见钟情(2)_网络编辑
·网站建设基础seo搜索引擎优化_seo网站优化
相关主题
  • visual basic 6中发送邮件的新方法_邮件服务器
  • visual c#的excle编程_c#应用
  • visual c#创建和使用activex组件_c#应用
  • visuallisp的概念、功能和基本界面_autocad教程
  • visualbasic窗体背景花纹的实现_visualbasic教程
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭