使用ExecuteScalar和EnterpriseLibrary.Data.Database时,关闭连接的正确方法是什么

时间:2018-02-23 21:27:58

标签: c# enterprise-library

当我使用Microsoft.Practices.EnterpriseLibrary.Data.Database和ExecuteScalar方法时,我没有找到关闭连接或Dispose的正确方法。 我不能使用使用块导致对象不实现IDisposable。如果我使用Finally块,我还没弄清楚如何处理。我是否需要这样做,或者我的第一个使用块将在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
        }
}

1 个答案:

答案 0 :(得分:0)

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

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

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