我收到了这段代码:
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)) { .... }
吗?
答案 0 :(得分:3)
不,它会拨打Dipose()
。 using
块将隐式调用Dispose()
语句中指定的对象上的using
。
但通常情况下,数据库连接Dispose()
处理Close()
功能,释放保持连接的连接/ processId。
答案 1 :(得分:0)
我还想补充一点,如果//here working on oraclecommand
中的某个地方发生异常(基本上在using(...){ }
声明中,Dispose()
也会被调用。
按照设计,您应该可以对实现IDisposable
的对象进行多次调用。在您的情况下,在Close()
代码块之后发出调用using
的调用将无法执行任何操作,因为连接已关闭/已返回池中。在对象清理完之后的任何其他调用应该只返回并且什么也不做。