如何在.NET中关闭OracleConnection

时间:2009-03-30 18:14:47

标签: oracle database-connection dispose using

说我有这两个对象:

OracleConnection connection = new OracleConnection(connectionString);  
OracleCommand command = new OracleCommand(sql, connection);

要关闭连接或Oracle,我是否必须调用command.Dispose(),connection.Dispose()或两者?

这是否足够好:

using(connection)  
{
    OracleDataReader reader = cmd.ExecuteReader();
    // whatever...
}

4 个答案:

答案 0 :(得分:17)

using (OracleConnection connection = new OracleConnection(connectionString))
{
    using (OracleCommand command = new OracleCommand(sql, connection))
    {
        using (OracleDataReader reader = cmd.ExecuteReader())
        {
        }
    }
}

如果它实现了IDisposable,并且如果你创建它,那么将它放在一个使用块中。

答案 1 :(得分:7)

这两个答案都非常符合目标。您总是希望在任何IDisposeable对象上调用.Dispose()。通过包装在“使用”中,您可以使编译器始终为您提供try / finialy块。

1点注意,如果你想避免嵌套,可以像这样编写相同的代码:

 using (OracleConnection connection = new OracleConnection(connectionString))
 using (OracleCommand command = new OracleCommand(sql, connection))
 using (OracleDataReader reader = cmd.ExecuteReader())
    {
        // do something here
    }

答案 2 :(得分:3)

这很好。 using语句将包装dispose语句,所以即使抛出异常,你也是安全的,这是我处理资源的首选方式。

using(OracleConnection connection = new OracleConnection(connectionString);    )  
{
   //Create a command object 
    using(OracleCommand command = new OracleCommand(sql, connection))
    {
      using(OracleDataReader reader = cmd.ExecuteReader())
      {
      }

    }
    // whatever...
}

我认为通过使用“using”,你要求编译器注入一个try ... finally块,在finally块中,它会为你关闭一次性对象。

答案 3 :(得分:3)

using将确保您的连接已关闭。您也可以将CommandBehavior.CloseConnection传递到命令的ExecuteReader方法,以便在调用Dispose之前将其关闭。