vb.net结构化异常处理和“邪用”
vb.net中的错误处理包括两种:非结构化异常处理技术和结构化异常处理。非结构化异常处理技术在vb 6.0中使用的比较普遍,即通过Err对象和ON Error、Go To、Resume等语句来实现。这种方式可以跟踪最近产生的异常和最近异常处理程序的位置。而结构化异常处理使用包含异常、代码块和筛选器的控制结构创建处理机制,即Try catch finally throw等关键字组成的结构化机制。因为非结构化异常处理在vb 6.0里已经接触过了,所以这里只讲结构化异常处理。
语法格式:
VB.NET结构化异常处理在代码中提供如下部分:
Try 段:可以产生一个异常,并且总是能够被执行到的代码段
Catch段:试图对一个异常做出处理,当异常发生时就会被执行的代码段
Finally段:进行一些清理工作,并且总能被执行到的代码段
基本的语法格式,就是上面这样,不再多说。结构化异常处理抛出异常有两种方式:一种是在catch块中添加关键字throw即可,另一种是在Try块中抛出throw new exception()。结构化异常处理可以对异常进行精确捕捉进而进行处理或者利用。用catch ex as <异常名>或者catch ex when <Err.number>实现。看下面的例子,通过异常处理来得到用户名名已存在的通知:
Try
If command.ExecuteNonQuery() = 1 Then
Return True
Else
Return False
End If
Catch When Err.Number = 3715 '精确抓取,主键重复错误,进行用户名存在处理
MsgBox("用户名已存在!", vbOKOnly + vbInformation, "系统消息")
Return False
catch ex As Exception
MsgBox("添加用户出错:" & ex.ToString, vbOKOnly + vbInformation, "系统消息")
Return False
End Try
以上例子即利用了主键约束的异常,实现了用户名重复的防止插入,这样就少了一次对数据库的访问和查询。所以异常虽然有可能会引起程序运行错误,但是因为其Err对象的编号可以对某一种错误进行精确处理。有时就可以带来意料之外的方便。
vb.net结构化异常处理和“邪用”的更多相关文章
- 第23章 SEH结构化异常处理(2)_编译器对系统SEH机制的封装
23.2 编译器层面对系统SEH机制的封装 23.2.1 扩展的EXCEPTION_REGISTRATION级相关结构:VC_EXCEPTION_REGISTRATION (1)VC_EXCEPTIO ...
- 第23章 SEH结构化异常处理(1)_系统SEH机制
23.1 基础知识 23.1.1 Windows下的软件异常 (1)中断和异常 ①中断是由外部硬件设备或异步事件产生的 ②异常是由内部事件产生的,可分为故障.陷阱和终止三类. (2)两种异常处理机制: ...
- 深入研究 Win32 结构化异常处理(好多相关文章)
摘要 就像人们常说的那样,Win32 结构化异常处理(SEH)是一个操作系统提供的服务.你能找到的所有关于 SEH 的文档讲的都是针对某个特定编译器的.建立在操作系统层之上的封装库.我将从 SEH 的 ...
- 深入研究 Win32 结构化异常处理(作者博客有许多SEH的研究文章)
摘要 就像人们常说的那样,Win32 结构化异常处理(SEH)是一个操作系统提供的服务.你能找到的所有关于 SEH 的文档讲的都是针对某个特定编译器的.建立在操作系统层之上的封装库.我将从 SEH 的 ...
- 异常处理第三讲,SEH(结构化异常处理),异常展开问题
异常处理第三讲,SEH(结构化异常处理),异常展开问题 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 不知道昨天有木有 ...
- [C++]深入解析结构化异常处理(SEH)
http://www.cppblog.com/weiym/archive/2015/02/27/209884.html 尽管以前写过一篇SEH相关的文章<关于SEH的简单总结>, 但那真的 ...
- Windows结构化异常处理浅析
近期一直被一个问题所困扰,就是写出来的程序老是出现无故崩溃,有的地方自己知道可能有问题,但是有的地方又根本没办法知道有什么问题.更苦逼的事情是,我们的程序是需要7x24服务客户,虽然不需要实时精准零差 ...
- SEH:结构化异常处理 学习
SEH:结构化异常处理 结构化异常处理机制提供了一个操作系统,用于优化结构的方案,为客户提供更强大的程序执行环境.试想一下,你写程序不用考虑内存访问错误,那里是空指针错误,一直在按照程序的逻辑结构来写 ...
- C#如何使用结构化异常处理
Knowledge Base: Chinese (Simplified) 如何使用 Visual C# .NET 和 Visual C# 2005 中的结构化异常处理文章ID: 816157 最近更新 ...
随机推荐
- printf的定义
1. printf的宏定义 #define XXX_ERROR 0#define XXX_WARNING 1#define XXX_INFO 2#define XXX_DEBUG 3#define X ...
- CSUOJ 1007 矩形着色
Description Danni想为屏幕上的一个矩形着色,但是她想到了一个问题.当点击鼠标以后电脑是如何判断填充的区域呢? 现在给你一个平面直角坐标系,其中有一个矩形和一个点,矩形的四条边均是平行于 ...
- GOF设计模式快速学习
这段时间,学习状态比较一般,空闲时基本都在打游戏,和研究如何打好游戏,终于通过戏命师烬制霸LOL,玩笑了.为了和"学习"之间的友谊小船不翻,决定对以往学习过的GOF设计模式做一个简 ...
- Xamarin 2017.11.1更新
Xamarin 2017.11.1更新 本次更新主要解决了一些bug.Visual Studio 2017升级到15.4.2获得新功能.Visual Studio 2015需要工具-选项-Xamar ...
- python2和python3同时安装
现在很多项目用python2完成的,很多情况下2和3是同时存在的 大多人都是先安装了python2 安装python3: 下一步: 然后安装完成以后,去cmd控制台输入python看看安装成功了吗(用 ...
- github下载项目
- android 定时, 延时 任务
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 倒计时类 用 倒计时定时器CountDownTimer 延迟类 CountDownT ...
- SDOI 2017 Round2 滚粗了
没进省队qwq 技不如人,甘拜下风
- C/C++ 之输入输出
因为C++向下兼容C,所以有多种输入输出的方式,cin/cout十分简洁,但个人觉得不如scanf/printf来的强大,而且在做算法题时,后者运行速度也快些. scanf/printf #inclu ...
- yyyy-MM-dd HH:mm:ss is Invalid Date in Safari, IE等浏览器下
一.踩坑背景 在做某个项目的过程中,系统要求兼容safari,在使用Element-ui情况下,用到了datepicker组件,但是datepicker在type为daterange情况下,页面首次加 ...