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.