错误是应用程序开发过程里不可避免的事情,而正确地处理可能发生的任何问题就是开发人员的责任了。
错误在Visual Basic里是以类属的方式来处理的,但是微软在.NET框架里采取了一种结构化的方法。这种方法也不会在乎所使用的语言。现在让我们更加仔细地看一下。
结构化的异常处理
异常和错误在.NET框架里是同义词。.NET环境从设计上有所变化,所以应用程序能够捕捉错误并有效地处理它们,而不是用系统挂机或者用难以理解的错误信息来让用户吃惊。下面的结构被用来安全地处理错误:
从本质上讲,这个结构会说:尝试(运行)这段代码,捕捉这一部分里的任何错误,最后,总是执行这段代码。
C#和VB.NET的句法是类似的,但是举例会给你更好的介绍。下面的VB.NET代码示例会打开一个数据库连接。错误被处理,而数据库的连接总是关闭的。
Dim conn As SqlConnection()
Dim comm As SqlCommand
Dim dr As SqlDataReader
Try
conn = New SqlConnection()
comm.= New SqlCommand()
conn.ConnectionString = "database=test"
comm.CommandText = "SELECT * FROM Authors"
comm.Connection = conn
conn.Open()
dr = comm.ExecuteReader()
If (dr Is Nothing) Then
Throw New System.Exception()
End If
While (dr.Read())
' do something
Wend
Catch
Console.WriteLine("Error occurred.")
Finally
If Not (conn Is Nothing) Then
If (conn.State = ConnectionState.Open) Then
conn.Close()
End If
conn.Dispose()
End If
If Not (comm Is Nothing) Then
comm.Dispose()
End If
If Not (dr Is Nothing) Then
If Not (dr.IsClosed) Then
dr.Close()
End If
dr.Dispose()
End If
End Try
要注意,try块最后的End Try这一行。代码尝试打开到SQL服务器数据库的连接,并通过这个连接读取数据。发生的任何错误都在捕捉块里被处理,并显示一个简要的消息。数据库对象在finally块里被清除。SqlConnection和SqlDataReader对象被关闭(如果原来打开了的话),所有的对象资源都被返回给系统(通过dispose方法)。