我对下面的编码感到有点困惑。他们俩都一样吗?如果没有,哪一个是最好的,为什么?
//Two using blocks for Command and Connection
using (var cn = new OracleConnection(connectionString))
using (var cmd = new OracleCommand(sql, cn))
{
}
//One using block for Command and Connection
using (var cmd = new OracleCommand(sql, new OracleConnection(connectionString)))
{
}
答案 0 :(得分:1)
首先假设你意外添加了一个额外的)
(否则都不会编译),那么第一个例子将正确地处理命令和连接,而第二个例子只会处理命令。
这是第一个的等效代码。
OracleConnection cn = new OracleConnection(connectionString);
try
{
OracleCommand cmd = new OracleCommand(sql, cn);
try
{
// Use cmd and cn here.
}
finally
{
if(cmd != null)
((IDisposable)cmd).Dispose();
}
}
finally
{
if(cn != null)
((IDisposable)cn).Dispose();
}
和第二个。
OracleCommand cmd = new OracleCommand(sql, new OracleConnection(connectionString));
try
{
// Use cmd here.
}
finally
{
if(cmd != null)
((IDisposable)cmd).Dispose();
}
另请注意,如果它们的类型相同,则只能创建多个实例,这些实例将全部放在一个实例中。如以下关于using的MSDN页面中的示例所示。
using (Font font3 = new Font("Arial", 10.0f),
font4 = new Font("Arial", 10.0f))
{
// Use font3 and font4.
}