try和catch不退出程序,他們只是控制代碼的情況下,一些特殊情況發生流動。
當try塊中發生異常時,執行繼續在(對應的)catch塊的第一行。在執行catch塊之後,代碼會在catch之後的第一行繼續執行,在您的情況下,該代碼可能是End While
,它將繼續循環。
所以這樣
While dr.Read
Try
InsertRowIntoDataBase()
Catch ex As Exception
LogErrorToFile(ex)
End Try
End While
的建設應該爲你工作。
但是,這是一個糟糕的設計,因爲它會生成並記錄一個異常,無論問題是什麼,數據是無效的,還是sql服務器關閉,或者即使代碼有錯誤例如潛伏的NullReferenceException)。您應該限制對特定情況的例外處理,例如與數據庫中的問題,如:
While dr.Read
Try
InsertRowIntoDataBase()
Catch ex As SqlClient.SqlException
LogDataBaseErrorToFile(ex)
End Try
End While
此外,如果有一些已知的數據可能存在的問題(例如,在CSV一個字符串,其中一個整數預期)最好是剛剛檢查,而不是使用一個例外機制,沿着這些線:
While dr.Read
Try
If Not IsRowValid() Then
LogInvalidDataToFile()
Continue While
End If
InsertRowIntoDataBase()
Catch ex As SqlClient.SqlException
LogDataBaseErrorToFile()
Catch ex As Exception
LogGenericErrorToFile()
End Try
End While
爲什麼*捕捉*異常終止你的程序?你能提供一些代碼嗎? – Markus 2011-12-14 09:19:09