SubSonic - 需要手动强制连接关闭吗?

时间:2010-11-16 20:41:29

标签: database subsonic enterprise-library database-connection

在使用Enterprise Library时,必须手动关闭数据库连接存在问题,因为GC在扫描堆时会查找超出范围的项目。

正在使用的池的一部分连接,但连接状态已中断或正在获取,但您已收到结果,将保持打开状态,并且池中的连接句柄将用完。

因此,添加手动连接检查和强制关闭连接是很好的形式。

现在,请使用SubSonic。使用EntLib库,我在finally块中执行以下操作:

        public static bool GetISOCountryCodes(out DataSet dsISOCountryCodes, out Response dbResponse)
    {
        dbResponse = new Response();
        dsISOCountryCodes = new DataSet();
        StoredProcedure sp = null;
        try
        {
            sp = SPs.GetISOCountryCodes(null);
            dsISOCountryCodes = sp.GetDataSet();

            // set the response object properties
            dbResponse = new Response((int)sp.OutputValues[0]);

            return dbResponse.IsValid;
        }
        catch (System.Exception ex)
        {
            return dbResponse.IsValid;               
        }
        finally
        {
                if (sp.Command != null && sp.Command.ToDbCommand().Connection != null &&
                sp.Command.ToDbCommand().Connection.State == ConnectionState.Open)
                sp.Command.ToDbCommand().Connection.Close();
        }
    }

我知道有人说你不必手动这样做,因为SubSonic会为你做这件事,但是,我想知道是否有人遇到SubSonic没有关闭连接的问题(再一次,因为它在根目录使用EntLib,如果有更好的方法来实现这一点。

显然,在我的所有数据调用方法中,我将引用一个,例如“ConnectionCloser()”方法。

感谢。

1 个答案:

答案 0 :(得分:0)

这篇文章更像是一个讨论通知。但是,我不确定问题是否已经用v5实际解决了。所以基本上答案是继续检查finally块。