CA2202来自OracleConnection处理的代码分析警告

时间:2010-06-22 14:48:11

标签: visual-studio-2010 code-analysis odp.net ca2202

我们从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多个   时间在一个物体上。

1 个答案:

答案 0 :(得分:1)

如果删除该行:

oraConnection.Close();

它应该摆脱警告,因为关闭和处理连接基本上是一回事。

您可能还想用using语句替换try / finally。

请注意,Microsoft自己的指南说IDisposable.Dispose应该以可以安全地多次调用的方式实现。这意味着可以安全地忽略CA2202警告,如the comment by JoeM27 on the MSDN page for CA2202中所述。