你能保证你的程序不会出问题吗?

不能

当你的程序执行到某个地方发生了你不想要的结果。你是否想让它一错再错?

不想

你是否想让你的程序占着茅坑不拉屎?

不想

你是否想知道你的程序出错的原因?

个问题之后。假设你的回答和我的一致,那么请看下文

trycatch finally的使用方法:

  1. try
  2. '你想要写的程序
  3. catch
  4. '捕获你想写的程序里面全部发生的异常
  5. finally
  6. '不管发生还是不发生异常,你都想运行的代码

演示样例:

  1. Dim Update_Info As String = "update " & Table & "set " & FieldAndContent    '改动的sql语句
  2. Dim DBConnectStr As New ConnectStringDAL    '数据库连接字符串
  3. Dim DBConnection As New SqlConnection(DBConnectStr.ConnectString)   '数据库连接对象
  4. DBConnection.Open() '连接数据库
  5. Dim DBCmd As New SqlCommand(Update_Info, DBConnection)  '运行改动语句
  6. Result = "成功改动了:" & DBCmd.ExecuteNonQuery & "行"
  7. Catch ex As Exception
  8. Result = "在改动数据过程中发生了错误:" & ex.Message
  9. MsgBox Result
  10. finally

    DBConnection.Close



倘若你的程序在连接数据库的时候出错导致连接失败,假设没有不论什么你能够參考的提示信息。那么你可能会觉得是查询语句错了。而不是sa用户的登录password错误了。而如上程序,假设

DBConnection.Open() '连接数据库

这里出错了,那么这句完了之后她就直接跳转到catch ex as exception那里运行它以下的语句,通过调用ex.message,它会返回错误的原因,可能是username或password错误了。然后你能够在finally那里写上关闭数据库连接的代码,这样就能够防止程序遇到错误直接跳出程序。而不释放资源(相当于占着茅坑不拉屎)。



回到刚才的第二个问题,当程序发生了你不想要的结果。他会一直执行下去。刚才说遇到错误它会跳出来。可是不想要的结果如本来这个变量A应该被赋值得到3,可是它却是4,而这个时候它是不会直接跳出的,由于这不是什么异常的错误,可能是逻辑上的错误。依照分层的思想。假设发生在UI层,我们为了让UI曾职责单一,不进行不必要的推断语句,仅仅负责用户操作的响应、用户数据的传递和各种显示的功能,逻辑上不做太多的推断和处理,这时候你能够使用抛出异常来使你的程序发生异常,直接跳到catch那里。

比方上面的代码

  1. Dim Update_Info As String = "update " & Table & "set " & FieldAndContent    '改动的sql语句
  2. Dim DBConnectStr As New ConnectStringDAL    '数据库连接字符串
  3. Dim DBConnection As New SqlConnection(DBConnectStr.ConnectString)   '数据库连接
  4. Dim DBCmd As New SqlCommand(Update_Info, DBConnection)  '运行改动语句
  5. Result = "成功改动了:" & DBCmd.ExecuteNonQuery & "行"
  6. Catch ex As Exception
  7. Result = "在改动数据过程中发生了错误:" & ex.Message

在连接数据库之前抛出了异常,注意。这个异常是你人为 的制造的。它也属于异常的一种类型,所以这个时候它就不运行连接数据库以及以下的代码直到catch为止,他会运行catch以下的代码,并显示异常的原因。值得注意的是finally后面的语句,无论程序是否会出现异常。它肯定是会运行的,一般自己衡量一下该运行什么程序好。一般都会写一些释放资源的代码。

重构机房收费系统你要用的——异常处理和抛出异常(try catch finally)——(vb.net)的更多相关文章

  1. 重构版机房收费系统之分层、接口、数据库连接、反射+工厂(vb.net)

    分层 分层是为了减少层与层之间的依赖,添加程序的可读性,让整个系统结构清晰明白.还可大大减少维护成本,可是分层也有一定的缺点,有些能够直接訪问数据库的层,却要通过负责訪问数据库的层进行訪问.这样,在訪 ...

  2. 机房收费系统个人重构关于SQLHelper

    近期在敲机房,对于SQLHelper也是心里有些怵,由于原来没用过,可是看了一些博客和资料后发现,假设不用这个类,会大大添加代码量,并且,事实上它并不新,它是一个有多个关于数据库增删改查操作的语句函数 ...

  3. VB.NET<机房收费系统个人重构版>你都学会了什么(之五)

    接着上篇我们说的配置文件,今天我们来说一下接口. 1.UML图 2.三层架构 3.Sqlhelper 4.配置文件 5.接口 6.设计模式 什么是接口呢?我们可以将接口理解为用于沟通的中介的抽象化.可 ...

  4. 机房收费系统——转换list泛型时,字段名称不正确应出现故障

    因为之前对泛型研究了一番,所以就開始尝试着在机房收费系统重构中增加了泛型的使用. 可是到了做学生查看剩余金额这个功能的时候,还是依照之前的方法做的,可是在载入数据的时候班级这个框就没有显示出来--然后 ...

  5. 机房收费系统(VB.NET)——超具体的报表制作过程

    之前做机房收费系统用的报表是Grid++Report,这次VB.NET重构中用到了VisualStudio自带的报表控件. 刚開始当然对这块功能非常不熟悉,只是探究了一段时间后还是把它做出来了. 以下 ...

  6. 机房收费系统(VB.NET)个人版总结

    重构版个人机房收费系统大概从暑假开学開始进行.花了不到一个半月的时间才完毕.以下对我在重构过程中的一写理解. 1.系统设计一个非常重要的目的就是重用.而要做到重用,低耦合是最有效的手段回想一下我们C/ ...

  7. VB.NET机房收费系统总结

    总感觉这次机房收费系统非常有份量,一直没有下手总结,从2014-7-27至2014-9-29.这中间有太多故事和成长.首先说一下两次机房收费系统的不同,它是我们从面向过程向面向对象的一个转变.在.NE ...

  8. UML实战总结——机房收费系统UML第一版部分图展

    距离机房收费系统已经过去了近2个月之久,如今的UML图才出来,从软件开发设计的逻辑上来讲这是顺序有问题的,不过,对于我们而言,而且是初次用面向对象的思想去设计和建模,就当是UML的一个实战练手的项目吧 ...

  9. vb.net机房收费系统之组合查询

    我个人一直认为,组合查询是机房收费系统的一个难点,尤其是用到三层之后,如果要为组合查询中的每一个查询建立一个显然是太麻烦了. 下面介绍一下我的方法,对大家起个参考作用. 我将该表中可输入的内容定义为一 ...

随机推荐

  1. BZOJ 4809: 皇后

    题目大意: n皇后问题,有些格子不能放. 题解: 直接暴力,并不用加优化就能过. 代码: #include<cstdio> using namespace std; int cc,n,an ...

  2. 【Spring和SpringMVC】自动扫描注解类的问题

    尊重原创原文链接:http://blog.csdn.net/u014277445/article/details/52282697 Spring MVC项目中通常会有二个配置文件,spring-ser ...

  3. PYDay10&11&12&13-常用模块:time|datetime|os|sys|pickle|json|xml|shutil|logging|paramiko、configparser、字符串格式化、py自动全局变量、生成器迭代器

    1.py文件自动创建的全局变量 print(vars()) 返回值:{'__name__': '__main__', '__package__': None, '__loader__': <_f ...

  4. node.js中的http.request方法使用说明

    http.get(options, callback) 由于该方法属于http模块,使用前需要引入http模块(var http= require(“http”) ) 接收参数: option   数 ...

  5. vim 第三章 插入模式

    vim 第三章  插入模式 在普通模式下可以删除  复制   及粘贴的命令    在插入模式下也存在以中方便快捷的方式    能够粘贴寄存器中文本   两种方式来插入键盘上不存在的非常用字符 替换模式 ...

  6. 【编程工具】Sublime Text3 之 Emmet 插件的详细使用的方法

    这篇关于 Emmet 插件使用的博文之前就想写了,今天刚好闲暇时间,就花了一些时间进行了总结. 我们都这道 Emmet 这款插件在前端设计里被称为神器,确实,神器称号名不虚传.因为这款插件可以帮助我们 ...

  7. E. A Magic Lamp

    E. A Magic Lamp Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 32768KB   64-bit integer IO ...

  8. Codeforces Round #407 (Div. 2) B+C!

    B. Masha and geometric depression 被这个题坑了一下午,感觉很水,一直WA在第14组,我那个气啊,结束后发现第14组有点小争议,于是找出题人解释,然后出题人甩给了我一段 ...

  9. iOS视频录制,裁剪(输出指定大小)

    弄了几天,终于搞懂一点了,博客后面再写,先附上demo,等研究清楚再写 demo地址:http://pan.baidu.com/s/1o6w2CMu

  10. HDU——1195Open the Lock(双向BFS)

    Open the Lock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...