CA2202 Предупреждение от анализа кода для утилизации OracleConnection - PullRequest
0 голосов
/ 22 июня 2010

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

1 голос
/ 28 июня 2010

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

oraConnection.Close();

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

Возможно, вы также захотите заменитьваш try / finally с помощью оператора using.

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

...