[英]Do we need to close DbCommand in enterprise library 4.1?
我的功能如下所示。 我的問題是:我們是否需要在此功能中關閉cmd。 我的理解是企業庫使用后會自動關閉連接。
const String STORED_PROCEDURE_NAME = "LTR_GetLicenseDetails";
const string DB_CONNECTION_NAME = "LTRDB";
MSPData.Database db;
DbCommand cmd = null;
db = CreateDatabase(DB_CONNECTION_NAME);
DataSet ds;
try
{
//Need to close cmd in enterprise libra
cmd = db.GetStoredProcCommand(STORED_PROCEDURE_NAME);
ds = ExecuteDataSet(db, cmd);
}
catch (Exception ex)
{
thrown ex;
}
Database.GetStoredProcCommand
返回實現IDisposable
的IDbCommand
。 通常,如果對象實現IDisposable
,則應在不再需要該對象時將其處置。
實際上,如果您調用不接受命令的企業庫方法,則它們將構造一個命令並將其處置。 例如
public virtual DataSet ExecuteDataSet(string storedProcedureName,
params object[] parameterValues)
{
using (DbCommand command = GetStoredProcCommand(storedProcedureName, parameterValues))
{
return ExecuteDataSet(command);
}
}
您對Enterprise Library的理解是正確的-調用Database.Execute *方法之一(例如ExecuteDataSet)時,連接將關閉。 因此,不處理命令對象將不會導致孤立的數據庫連接。 但是,根據數據庫提供程序的不同,可能會導致其他類型的泄漏。
對於SQL Server,我上一次查看SqlCommand
,如果不處置該對象,則不會造成任何明顯的危害,而且我記得唯一的問題是參數緩存必須等待釋放垃圾回收。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.