簡體   English   中英

我們是否需要在企業庫4.1中關閉DbCommand?

[英]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返回實現IDisposableIDbCommand 通常,如果對象實現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM