【问题标题】:Is Close on database connection calling here?是关闭数据库连接调用这里吗?
【发布时间】:2012-02-21 05:27:03
【问题描述】:

我得到了这个代码:

try
{
    using (OracleConnection c = new OracleConnection(globalDict[byAlias(connAlias)].connString))
    {
        c.Open();

        using (OracleCommand recordExistentQuery = new OracleCommand("regular.IsExistent", c))
        {
        // here working on oraclecommand
        }
    } 
 } catch(Exception exc) { }

OracleConnection 是用于 Oracle 的 devArt dotConnect 类。 当这段代码超出(OracleConnection c = new OracleConnection(globalDict[byAlias(connAlias)].connString)) { .... } 时,它会调用c.Close() 吗?

【问题讨论】:

    标签: c# .net database-connection using-statement devart


    【解决方案1】:

    不,它会调用Dipose()using 块将在 using 语句中指定的对象上隐式调用 Dispose()

    但通常对于数据库连接,Dispose() 处理Close() 功能,释放保持连接的连接/processId。

    【讨论】:

      【解决方案2】:

      我还想补充一点,如果您的 //here working on oraclecommand 某处发生异常(基本上在您的 using(...){ } 语句中,Dispose() 也会被调用。

      按照设计,您应该能够对实现IDisposable 的对象进行多次调用。在您的情况下,在您的 using 代码块之后发出对 Close() 的调用将根本不做任何事情,因为连接已经关闭/已返回到池中。清除对象后的任何其他调用应该返回并且什么都不做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        • 2013-10-16
        • 1970-01-01
        相关资源
        最近更新 更多