如何在 .NET 中关闭 OracleConnection

问题描述 投票:0回答:4

假设我有这两个对象:

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

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

这够好吗:

using(connection)  
{
    OracleDataReader reader = cmd.ExecuteReader();
    // whatever...
}
oracle database-connection dispose using
4个回答
17
投票
using (OracleConnection connection = new OracleConnection(connectionString))
{
    using (OracleCommand command = new OracleCommand(sql, connection))
    {
        using (OracleDataReader reader = cmd.ExecuteReader())
        {
        }
    }
}

如果它实现了 IDisposable,并且您创建了它,则将其放入 using 块中。


7
投票

这两个答案都非常符合目标。您几乎总是想在任何 IDisposeable 对象上调用 .Dispose()。通过包装“using”,您可以告诉编译器始终为您实现 try/finialy 块。

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

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

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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.