如何在.NET中关闭OracleConnection

Mik*_*ock 9 oracle dispose database-connection using

说我有这两个对象:

OracleConnection connection = new OracleConnection(connectionString);  
OracleCommand command = new OracleCommand(sql, connection);
Run Code Online (Sandbox Code Playgroud)

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

这够好了:

using(connection)  
{
    OracleDataReader reader = cmd.ExecuteReader();
    // whatever...
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ers 17

using (OracleConnection connection = new OracleConnection(connectionString))
{
    using (OracleCommand command = new OracleCommand(sql, connection))
    {
        using (OracleDataReader reader = cmd.ExecuteReader())
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果它实现了IDisposable,并且如果你创建它,那么将它放在using块中.


Rus*_*uss 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
    }
Run Code Online (Sandbox Code Playgroud)

  • 你*可以*编写这样的代码,但恕我直言,你应该**永远不要这样写. (3认同)

J.W*_*.W. 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...
}
Run Code Online (Sandbox Code Playgroud)

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