我们从Visual Studio 2010中的代码分析中收到以下警告,我想知道这是否是我们可以安全忽略的误报,或者代码应该重构以正确处理对象。
相关代码:
public void MyFunction()
{
OracleConnection oraConnection = null;
OracleCommand oraCommand = null;
try
{
// Connect to the database
oraConnection = new OracleConnection(connectionString);
oraConnection.Open();
// Prepare and run the query
oraCommand = new OracleCommand(sqlQuery, oraConnection);
oraCommand.ExecuteNonQuery();
}
catch { throw; }
finally
{
// Perform a safe cleanup
if (oraCommand != null) { oraCommand.Dispose(); }
if (oraConnection != null)
{
oraConnection.Close();
oraConnection.Dispose();
}
}
}
相关错误消息:
警告18 CA2202:Microsoft.Usage:可以处理对象'oraConnection' 方法'ClassName.MyFunction()'中不止一次。为了避免产生 System.ObjectDisposedException你不应该调用Dispose多个 时间在一个物体上。
答案 0 :(得分:1)
如果删除该行:
oraConnection.Close();
它应该摆脱警告,因为关闭和处理连接基本上是一回事。
您可能还想用using语句替换try / finally。
请注意,Microsoft自己的指南说IDisposable.Dispose应该以可以安全地多次调用的方式实现。这意味着可以安全地忽略CA2202警告,如the comment by JoeM27 on the MSDN page for CA2202中所述。