0

我们从 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。

4

1 回答 1

1

如果删除该行:

oraConnection.Close();

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

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

请注意,Microsoft 自己的指南说 IDisposable.Dispose 应该以可以安全地多次调用的方式实现。这意味着可以安全地忽略 CA2202 警告,正如JoeM27 在 CA2202 的 MSDN 页面上的评论中所述

于 2010-06-28T07:00:23.083 回答