Try Catch能幫你做什麼(1)?

看到這個標題大概很多人會笑出來:「廢話!當然是除錯!」。是的,Try Catch最主要的功能就是除錯,而這檔事也是初學者應該要列為首要學習的事情之一,所以我想特別談談這件事情。

        看到這個標題大概很多人會笑出來:「廢話!當然是除錯!」。是的,Try Catch最主要的功能就是除錯,而這檔事也是初學者應該要列為首要學習的事情之一,所以我想特別談談這件事情。

最初步的除錯碼會形成這樣一個結構:
[VB.NET]
Try
    ‘你的程式碼
Catch ex As Exception
    ‘出了錯該怎麼辦?
End Try
 
有幾個Exception類別的方法和屬性是我比較常用的,用以下的範例來說明:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        TextBox4.Text = ""
             Try
            Dim myConn As New SqlConnection("")
            Dim myCmd As New SqlCommand("Select * from TBxx", myConn)
            myConn.Open()
            myCmd.ExecuteReader()
        Catch ex As Exception
 
            TextBox1.Text = ex.ToString
            TextBox2.Text = ex.Message
            TextBox3.Text = ex.Source
            TextBox4.Text = ex.StackTrace
        
        End Try
    End Sub
這是一個有錯誤的程式,這個畫面上只有一個Button物件加上五個MultiLine屬性為True的TextBox因為connection是個空的字串,所以一定會出錯!
在TextBox1中會呈現整個錯誤訊息內容:
System.InvalidOperationException: ConnectionString 屬性尚未初始化。
System.Data.SqlClient.SqlConnection.PermissionDemand()
System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,   DbConnectionFactory connectionFactory)
System.Data.SqlClient.SqlConnection.Open()
SQlDepend.Form2.Button1_Click(Object sender, EventArgs e)
D:\ TEST\SQlDepend\SQlDepend\Form2.vb: 17
 
Exception.Message屬性在MSDN裡中是這樣說明的:「取得描述目前例外狀況的訊息。」,所以TextBox2的內容:
ConnectionString 屬性尚未初始化。
 
Exception.Source屬性在MSDN裡中是這樣說明的:「取得或設定造成錯誤的應用程式或物件的名稱。如果未設定 Source,則會傳回產生例外狀況的組件的名稱。」,因此TextBox3的內容就是造成這個錯誤的組件:
System.Data
 
Exception.StackTrace 屬性在MSDN裡中是這樣說明的:「描述呼叫堆疊內容的字串,最先出現最近的方法呼叫。執行堆疊會記錄指定的執行個體的所有執行中方法。方法呼叫的追蹤稱為堆疊追蹤。堆疊追蹤清單提供方法來跟隨呼叫順序至發生例外狀況的方法中的行號。」,這一大堆的『於』在告訴我們倒底是哪邊出了毛病,以下這一段很明顯地看的出來,問題出在17行,而且鐵定和SqlConnection脫不了關係。
 
 System.Data.SqlClient.SqlConnection.PermissionDemand()
System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
System.Data.SqlClient.SqlConnection.Open()
SQlDepend.Form2.Button1_Click(Object sender, EventArgs e)
D:\ TEST\SQlDepend\SQlDepend\Form2.vb: 17
 
Exception還有一些其它屬性與方法,各位可以看看MSDN相關的說明,就能更善用這個功能了。