重构机房收费系统你要用的——异常处理和抛出异常(try catch finally)——(vb.net)
你能保证你的程序不会出问题吗?
不能
当你的程序执行到某个地方发生了你不想要的结果。你是否想让它一错再错?
不想
你是否想让你的程序占着茅坑不拉屎?
不想
你是否想知道你的程序出错的原因?
想
个问题之后。假设你的回答和我的一致,那么请看下文
trycatch finally的使用方法:
- try
- '你想要写的程序
- catch
- '捕获你想写的程序里面全部发生的异常
- finally
- '不管发生还是不发生异常,你都想运行的代码
演示样例:
- Dim Update_Info As String = "update " & Table & "set " & FieldAndContent '改动的sql语句
- Dim DBConnectStr As New ConnectStringDAL '数据库连接字符串
- Dim DBConnection As New SqlConnection(DBConnectStr.ConnectString) '数据库连接对象
- DBConnection.Open() '连接数据库
- Dim DBCmd As New SqlCommand(Update_Info, DBConnection) '运行改动语句
- Result = "成功改动了:" & DBCmd.ExecuteNonQuery & "行"
- Catch ex As Exception
- Result = "在改动数据过程中发生了错误:" & ex.Message
- MsgBox Result
finally
DBConnection.Close
倘若你的程序在连接数据库的时候出错导致连接失败,假设没有不论什么你能够參考的提示信息。那么你可能会觉得是查询语句错了。而不是sa用户的登录password错误了。而如上程序,假设
DBConnection.Open() '连接数据库
这里出错了,那么这句完了之后她就直接跳转到catch ex as exception那里运行它以下的语句,通过调用ex.message,它会返回错误的原因,可能是username或password错误了。然后你能够在finally那里写上关闭数据库连接的代码,这样就能够防止程序遇到错误直接跳出程序。而不释放资源(相当于占着茅坑不拉屎)。
回到刚才的第二个问题,当程序发生了你不想要的结果。他会一直执行下去。刚才说遇到错误它会跳出来。可是不想要的结果如本来这个变量A应该被赋值得到3,可是它却是4,而这个时候它是不会直接跳出的,由于这不是什么异常的错误,可能是逻辑上的错误。依照分层的思想。假设发生在UI层,我们为了让UI曾职责单一,不进行不必要的推断语句,仅仅负责用户操作的响应、用户数据的传递和各种显示的功能,逻辑上不做太多的推断和处理,这时候你能够使用抛出异常来使你的程序发生异常,直接跳到catch那里。
比方上面的代码
- Dim Update_Info As String = "update " & Table & "set " & FieldAndContent '改动的sql语句
- Dim DBConnectStr As New ConnectStringDAL '数据库连接字符串
- Dim DBConnection As New SqlConnection(DBConnectStr.ConnectString) '数据库连接
- Dim DBCmd As New SqlCommand(Update_Info, DBConnection) '运行改动语句
- Result = "成功改动了:" & DBCmd.ExecuteNonQuery & "行"
- Catch ex As Exception
- Result = "在改动数据过程中发生了错误:" & ex.Message
在连接数据库之前抛出了异常,注意。这个异常是你人为 的制造的。它也属于异常的一种类型,所以这个时候它就不运行连接数据库以及以下的代码直到catch为止,他会运行catch以下的代码,并显示异常的原因。值得注意的是finally后面的语句,无论程序是否会出现异常。它肯定是会运行的,一般自己衡量一下该运行什么程序好。一般都会写一些释放资源的代码。
重构机房收费系统你要用的——异常处理和抛出异常(try catch finally)——(vb.net)的更多相关文章
- 重构版机房收费系统之分层、接口、数据库连接、反射+工厂(vb.net)
分层 分层是为了减少层与层之间的依赖,添加程序的可读性,让整个系统结构清晰明白.还可大大减少维护成本,可是分层也有一定的缺点,有些能够直接訪问数据库的层,却要通过负责訪问数据库的层进行訪问.这样,在訪 ...
- 机房收费系统个人重构关于SQLHelper
近期在敲机房,对于SQLHelper也是心里有些怵,由于原来没用过,可是看了一些博客和资料后发现,假设不用这个类,会大大添加代码量,并且,事实上它并不新,它是一个有多个关于数据库增删改查操作的语句函数 ...
- VB.NET<机房收费系统个人重构版>你都学会了什么(之五)
接着上篇我们说的配置文件,今天我们来说一下接口. 1.UML图 2.三层架构 3.Sqlhelper 4.配置文件 5.接口 6.设计模式 什么是接口呢?我们可以将接口理解为用于沟通的中介的抽象化.可 ...
- 机房收费系统——转换list泛型时,字段名称不正确应出现故障
因为之前对泛型研究了一番,所以就開始尝试着在机房收费系统重构中增加了泛型的使用. 可是到了做学生查看剩余金额这个功能的时候,还是依照之前的方法做的,可是在载入数据的时候班级这个框就没有显示出来--然后 ...
- 机房收费系统(VB.NET)——超具体的报表制作过程
之前做机房收费系统用的报表是Grid++Report,这次VB.NET重构中用到了VisualStudio自带的报表控件. 刚開始当然对这块功能非常不熟悉,只是探究了一段时间后还是把它做出来了. 以下 ...
- 机房收费系统(VB.NET)个人版总结
重构版个人机房收费系统大概从暑假开学開始进行.花了不到一个半月的时间才完毕.以下对我在重构过程中的一写理解. 1.系统设计一个非常重要的目的就是重用.而要做到重用,低耦合是最有效的手段回想一下我们C/ ...
- VB.NET机房收费系统总结
总感觉这次机房收费系统非常有份量,一直没有下手总结,从2014-7-27至2014-9-29.这中间有太多故事和成长.首先说一下两次机房收费系统的不同,它是我们从面向过程向面向对象的一个转变.在.NE ...
- UML实战总结——机房收费系统UML第一版部分图展
距离机房收费系统已经过去了近2个月之久,如今的UML图才出来,从软件开发设计的逻辑上来讲这是顺序有问题的,不过,对于我们而言,而且是初次用面向对象的思想去设计和建模,就当是UML的一个实战练手的项目吧 ...
- vb.net机房收费系统之组合查询
我个人一直认为,组合查询是机房收费系统的一个难点,尤其是用到三层之后,如果要为组合查询中的每一个查询建立一个显然是太麻烦了. 下面介绍一下我的方法,对大家起个参考作用. 我将该表中可输入的内容定义为一 ...
随机推荐
- Java设计模式学习二
Java设计思想之单例模式 单例模式(Singleton Pattern)是Java中最常见的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的 ...
- log4net.dll配置以及在项目中应用
1,首先在项目中引用log4net.dll,然后项目中添加一个配置文件log4net.config <?xml version="1.0" encoding="ut ...
- mysql无法创建外键问题
在阿里云上面安装配置了Mysql后,无法创建外键, 原因及解决方法: 选择InnoDB引擎,因为MyISAM引擎不支持外键,默默地说一句,MySQL真神奇
- 【LeetCode】String Without AAA or BBB(不含 AAA 或 BBB 的字符串)
这道题是LeetCode里的第984道题. 题目要求: 给定两个整数 A 和 B,返回任意字符串 S,要求满足: S 的长度为 A + B,且正好包含 A 个 'a' 字母与 B 个 'b' 字母: ...
- 【LeetCode】Maximum Subarray(最大子序和)
这道题是LeetCode里的第53道题. 题目描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1 ...
- 也来“玩”Metro UI之磁贴(一)
Win8出来已有一段时间了,个人是比较喜欢Metro UI的.一直以来想用Metro UI来做个自己的博客,只是都没有空闲~~今天心血来潮,突然想自己弄一个磁贴玩玩,动手……然后就有了本篇. Win8 ...
- 自动化运维之shell引号和正则表达式(二)
1 shell引号 1)反斜线\ 转译 echo * 显示当前目录中所有的文件列表 echo \* 显示*字符 换行 find / \ 换行输入多行命令 > -name "test.t ...
- Oracle 数据库有五个必需的后台进程,DBWR,LGWR,CKPT,SMON,PMON
SMON 是系统监视器(System Monitor)的缩写.如果Oracle实例失败,则在SGA中的任何没有写到磁盘中的数据都会丢失.有许多情况可能引起Oracle实例失败,例如,操作系统的崩溃就会 ...
- 洛谷3830 [SHOI2012]随机树 【概率dp】
题目 输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结 ...
- poj 3304 判断是否存在一条直线与所有线段相交
Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8579 Accepted: 2608 Descript ...