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块中.
这两个答案都非常符合目标.您总是希望在任何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)
这已经足够好了。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块中,它将为您关闭一次性对象。