使用块命令对象关闭连接?
using block for command object close connection?
我对下面的编码有点困惑。它们是一样的吗?如果不是,哪一个是最好的,为什么?
//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)))
{
}
首先假设您不小心添加了一个额外的 )
(否则两者都不会编译)然后第一个示例将正确处理命令和连接,而第二个将仅处理命令。
这是第一个的等效代码。
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.
}
我对下面的编码有点困惑。它们是一样的吗?如果不是,哪一个是最好的,为什么?
//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)))
{
}
首先假设您不小心添加了一个额外的 )
(否则两者都不会编译)然后第一个示例将正确处理命令和连接,而第二个将仅处理命令。
这是第一个的等效代码。
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.
}