在这里调用数据库连接是否关闭?

时间:2012-02-21 05:27:03

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

我收到了这段代码:

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类。 当代码离开c.Close()时,此代码会调用(OracleConnection c = new OracleConnection(globalDict[byAlias(connAlias)].connString)) { .... }吗?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

按照设计,您应该可以对实现IDisposable的对象进行多次调用。在您的情况下,在Close()代码块之后发出调用using的调用将无法执行任何操作,因为连接已关闭/已返回池中。在对象清理完之后的任何其他调用应该只返回并且什么也不做。