1. 程式人生 > >重構機房收費系統你要用的——異常處理和拋出異常(try catch finally)——(vb.net)

重構機房收費系統你要用的——異常處理和拋出異常(try catch finally)——(vb.net)

style post blue 通過 alt list bcm round 導致

你能保證你的程序不會出問題嗎?

不能

當你的程序執行到某個地方發生了你不想要的結果。你是否想讓它一錯再錯?

不想

你是否想讓你的程序占著茅坑不拉屎?

不想

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

看了了這4個問題之後。假設你的回答和我的一致,那麽請看下文

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)