重构机房收费系统你要用的——异常处理和抛出异常(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后面的语句,无论程序是否会出现异常。它肯定是会运行的,一般自己衡量一下该运行什么程序好。一般都会写一些释放资源的代码。
最新文章
- 《Spark大数据处理》—— 读后总结
- 配置appium 1.6.3 for MAC
- sql server 使用for xml path 将1列多行转换为字符串连接起来,俗称 sql 合并字符
- add active class
- Android Fragment详解
- 函数fsp_seg_inode_page_find_free
- Struts2单文件上传
- lightoj 1013 dp
- Android(java)学习笔记216:多线程断点下载的原理(Android实现)
- codeforces 377B Preparing for the Contest 二分+优先队列
- lua简洁的功能(两)
- es6+require混合开发,兼容es6 module,import,export
- java_jsp和servlet中乱码问题
- selenium的定位方式
- Linux 普通用户免密码切换到root用户
- Python学习(五) —— 文件操作
- 负载均衡----实现配置篇(Nginx)
- curl java 模拟http请求
- consul vs etcd3
- Asp.Net MVC WebApi2 自动生成帮助文档
热门文章
- c#笔记2018-12-27
- php增加
- HDU——3786找出直系亲属(DFS+回溯)
- BestCoder Round #36
- BZOJ1924 [Sdoi2010]所驼门王的宝藏 【建图 + tarjan】
- hdu4035 Maze (树上dp求期望)
- uva 11762 数学期望+记忆化搜索
- Android Studio升级到3.0,抛出Aapt2Exception异常
- 【SPOJ220】Relevant Phrases of Annihilation(后缀数组,二分)
- 自动化测试框架之robot framework的应用分析