CA2202 Предупреждение от анализа кода для утилизации OracleConnection

Мы получаем следующее предупреждение от Code Analysis в 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 ответ

Решение

Если вы удалите строку:

oraConnection.Close();

следует избавиться от предупреждения, поскольку закрытие и удаление соединения - это одно и то же.

Вы также можете заменить свой try/finally на оператор использования.

Обратите внимание, что в собственных рекомендациях Microsoft говорится, что IDisposable.Dispose должен быть реализован таким образом, чтобы его можно было безопасно вызывать несколько раз. Это означает, что предупреждение CA2202 можно безопасно игнорировать, как отмечено в комментарии JoeM27 на странице MSDN для CA2202.

Другие вопросы по тегам