假设我有这两个对象:
OracleConnection connection = new OracleConnection(connectionString);
OracleCommand command = new OracleCommand(sql, connection);
要关闭连接或 Oracle,我是否必须调用 command.Dispose()、connection.Dispose() 或两者都调用?
这够好吗:
using(connection)
{
OracleDataReader reader = cmd.ExecuteReader();
// whatever...
}
using (OracleConnection connection = new OracleConnection(connectionString))
{
using (OracleCommand command = new OracleCommand(sql, connection))
{
using (OracleDataReader reader = cmd.ExecuteReader())
{
}
}
}
如果它实现了 IDisposable,并且您创建了它,则将其放入 using 块中。
这两个答案都非常符合目标。您几乎总是想在任何 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
}
这已经足够好了。 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块中,它会为你关闭一次性对象。
using
将确保您的连接已关闭。您还可以将 CommandBehavior.CloseConnection
传递给命令的 ExecuteReader
方法,以在调用 Dispose
之前将其关闭。