重構機房收費系統你要用的——異常處理和拋出異常(try catch finally)——(vb.net)
你能保證你的程序不會出問題嗎?
不能
當你的程序執行到某個地方發生了你不想要的結果。你是否想讓它一錯再錯?
不想
你是否想讓你的程序占著茅坑不拉屎?
不想
你是否想知道你的程序出錯的原因?
想
看了了這4個問題之後。假設你的回答和我的一致,那麽請看下文
trycatch finally的使用方法:
- try
- ‘你想要寫的程序
- catch
- ‘捕獲你想寫的程序裏面全部發生的異常
- finally
- ‘不管發生還是不發生異常,你都想運行的代碼
演示樣例:
-
Dim Update_Info As String = "update " & Table &
- 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)