这一段代码通过建立连接、命令、datareader对象连接到一个SQL Server数据库。当完成对数据库的操作之后,连接就会被关闭,并且调用dispose方法以处理这一过程相关的所有对象。以下为这段代码以C#的方式编写。
SqlConnection conn = null;
SqlCommand comm = null;
SqlDataReader dr = null;
conn = new SqlConnection();
comm. = new SqlCommand();
conn.ConnectionString = "data source=test;user id=test;password=test";
comm.CommandText = "SELECT * FROM test";
comm.Connection = conn;
conn.Open();
// Do something with the database
conn.Close();
conn.Dispose();
comm.Dispose();
dr.Close();
以上这段代码采用几个步骤将资源返回给系统,但前面的范例可以通过try/catch语法以确保对象被处理而得到扩展。以下为前面的VB.NET范例的扩展,其中使用try块而确保对象资源被释放。
Dim conn As SqlConnection
Dim comm As SqlCommand
Dim dr As SqlDataReader
conn = New SqlConnection()
comm = New SqlCommand()
Try
conn.ConnectionString = "data source=test;user id=test;password=test"
comm.CommandText = "SELECT * FROM test"
comm.CommandType = CommandType.Text
comm.Connection = conn
conn.Open()
dr = comm.ExecuteReader()
' Work with database
Catch ex As SqlException
Console.Writeline("SQL Error")
Catch ex As Exception
Console.Writeline("Exception")
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
End If
End Try
增加修补的代码块执行了对象清除(object cleanup),以确保无论在try部分中发生什么情况都会执行。无论出现什么异常,都会执行最后的代码块。添加的其它代码确保在调用dispose方法之前所有的对象都存在。
你可以查看.NET框架库中的类,以知道dispose方法何时和如何被执行,因为在开发过程中你一定会使用这一方法。可以利用类声明中的Idisposable接口将这一方法包含在你自己的类中,以下的VB.NET范例说明了这一过程:
Public Class MyClass Implements IDisposable
(在你的代码中如何使用一个dispose方法已经超过了本文讲述的范围,然而请记住,可以将这一方法包含在你自己建立的类中。)
认识到调用和使用dispose方法对于程序开发是相当有必要的,因为它使得程序能够正确地运行。当不采用这一方法,很多问题都会产生。当处理外部资源,如文件或者数据库连接时,这一方法更加有用。