【问题标题】:What is the proper way to close a connection when using ExecuteScalar and EnterpriseLibrary.Data.Database使用 ExecuteScalar 和 EnterpriseLibrary.Data.Database 时关闭连接的正确方法是什么
【发布时间】:2018-08-04 00:26:40
【问题描述】:

当我使用 Microsoft.Practices.EnterpriseLibrary.Data.Database 和 ExecuteScalar 方法时,我没有找到关闭连接或 Dispose 的正确方法。 我不能使用 using 块,因为对象没有实现 IDisposable。如果我使用 finally 块,我还没有弄清楚如何处理。我是否需要这样做,或者我的第一个 using 块将 Dispose/Close ExecuteScalar 上的连接?

这是我的代码:

DatabaseProviderFactory factory = new DatabaseProviderFactory();
DatabaseFactory.SetDatabaseProviderFactory(factory, false);
Database db = ... ;

// Initialize command
using (DbCommand dbCommand = db.GetStoredProcCommand("XXXXXX"))
{
        object r;

        // Execute command
        using (r = (object)db.ExecuteScalar(dbCommand)) //Getting error here
        {
            //Other code here
        }
}

【问题讨论】:

标签: c# enterprise-library


【解决方案1】:

第二个 using 语句不是必需的。 这里应该处理的对象是dbCommand。不是从它的方法返回的对象。 第一个using 语句负责处理它。

如果您根本不想使用using(在dbCommand 上),那么您可以在finally 块中使用try/finally 进行处理。 下面的链接解释了如何做到这一点。

https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/using-objects

【讨论】: