首页 > 代码库 > 重构机房收费系统你要用的——异常处理和抛出异常(try catch finally)——(vb.net)

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

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

不能

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

不想

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

不想

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

看了了这4个问题之后,如果你的回答和我的一致,那么请看下文

try catch finally的用法:

try
‘你想要写的程序
catch
‘捕获你想写的程序里面所有发生的异常
finally
‘无论发生还是不发生异常,你都想执行的代码

示例:
	Try
            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
        End Try

	倘若你的程序在连接数据库的时候出错导致连接失败,如果没有任何你可以参考的提示信息,那么你可能会认为是查询语句错了,而不是sa用户的登陆密码错误了。而如上程序,如果
DBConnection.Open() ‘连接数据库
这里出错了,那么这句完了之后她就直接跳转到catch ex as exception那里执行它下面的语句,通过调用ex.message,它会返回错误的原因,可能是用户名或密码错误了。然后你可以在finally那里写上关闭数据库连接的代码,这样就可以防止程序遇到错误直接跳出程序,而不释放资源(相当于占着茅坑不拉屎)。

	回到刚才的第二个问题,当程序发生了你不想要的结果,他会一直运行下去,刚才说遇到错误它会跳出来,但是不想要的结果如本来这个变量A应该被赋值得到3,但是它却是4,而这个时候它是不会直接跳出的,因为这不是什么异常的错误,可能是逻辑上的错误,按照分层的思想,如果发生在UI层,我们为了让UI曾职责单一,不进行不必要的判断语句,只负责用户操作的响应、用户数据的传递和各种显示的功能,逻辑上不做太多的判断和处理,这时候你可以使用抛出异常来使你的程序发生异常,直接跳到catch那里。比如上面的代码
	Try
            Dim Update_Info As String = "update " & Table & "set " & FieldAndContent    ‘修改的sql语句
            Dim DBConnectStr As New ConnectStringDAL    ‘数据库连接字符串
            Dim DBConnection As New SqlConnection(DBConnectStr.ConnectString)   ‘数据库连接对象
	    Throw New ArgumentOutOfRangeException	‘抛出异常
            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
        End Try
在连接数据库之前抛出了异常,注意,这个异常是你人为 的制造的,它也属于异常的一种类型,所以这个时候它就不执行连接数据库以及以下的代码直到catch为止,他会执行catch下面的代码,并显示异常的原因。值得注意的是finally后面的语句,不管程序是否会出现异常,它肯定是会执行的,一般自己衡量一下该执行什么程序好,一般都会写一些释放资源的代码!
	我到底做错了什么?自从把代码文本写了之后,下面说的话全是代码格式的!!!csdn。。。