管理连接
2008-09-11 15:33 晓彦 阅读(378) 评论(0) 收藏 举报数据库连接是有限资源,它们的妥善管理对可扩展的应用程序来说是必不可少的。仅在需要时保持连接打开并尽快关闭是一个很好的实践。根据设计,绝大多数的 Database 类方法在每次调用时打开和关闭到数据库的连接。因为,应用程序代码不需要包含用于管理连接的代码。(默认情况下,基于性能的原因,ADO.NET 将连接返回到连接池中,而不是关闭他们。因此,不需要缓存 Database 对象。)
例如,ExecuteDataSet 返回包含所有数据的 DataSet 对象。这给了你一个自己的本地副本。对 ExecuteDataSet 的调用打开了一个连接、组装了一个 DataSet、然后在返回结果前关闭连接。
下列代码示范了 ExecuteDataSet 方法的使用。
C#
Database db = DatabaseFactory.CreateDatabase();
string sqlCommand = "Select ProductID, ProductName From Products";
DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand);
// No need to open the connection; just make the call.
DataSet customerDataSet = db.ExecuteDataSet(dbCommand);
Visual Basic
Dim db As Database = DatabaseFactory.CreateDatabase()
Dim sqlCommand As String = "Select ProductID, ProductName From Products"
Dim dbCommand As DbCommand = db.GetSqlStringCommand(sqlCommand)
' No need to open the connection; just make the call.
Dim customerDataSet As DataSet = db.ExecuteDataSet(dbCommand)
然而,在关闭连接时有一些未清理的其他情况。一个例子就是 ExecuteReader 方法。此方法返回实现 IDataReader 接口的对象。Database 基类有一个返回 DbDataReader 对象的默认实现。DbDataReader 对象被设计用来读取需要的数据的特定部分,它需要一个打开的连接。换句话说,它不知道应用程序何时不再需要 DbDataReader 。如果数据访问应用程序块在返回 DbDataReader 之前就关闭了连接,DbDataReader 对客户代码而言是无用的。因此,DbDataReader 方法指定底层的 ADO.NET 在 DbDataReader 完成后自动关闭连接。在这种情况下,它被认为是由应用程序确定 DbDataReader 及时关闭的最好方法,可以使用 DbDataReader.close 方法显示的关闭 reader 或者强制 DbDataReader 的销毁,这是 Close 方法被调用的结果。
下列代码示范了对 ExecuteReader 方法的调用。using 语句(在 Visual Basic 中为 Using )确保 DbDataReader 对象被销毁,并在销毁的过程中关闭 DbDataReader 对象。
C#
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbCommand = db.GetSqlStringCommand("Select Name, Address From Customers");
using (IDataReader dataReader = db.ExecuteReader(dbCommand))
{
// Process results
}
Visual Basic
Dim db As Database = DatabaseFactory.CreateDatabase()
Dim dbCommand As DbCommand = db.GetSqlStringCommand("Select Name, Address From Customers")
Using dataReader As IDataReader = db.ExecuteReader(dbCommand)
' Process results
End Using
浙公网安备 33010602011771号