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();
        }
    }
}

関連するエラーメッセージ:

警告18CA2202:Microsoft.Usage:オブジェクト'oraConnection'は、メソッド'ClassName.MyFunction()'で複数回破棄できます。System.ObjectDisposedExceptionの生成を回避するには、オブジェクトに対してDisposeを複数回呼び出さないでください。

4

1 に答える 1

1

行を削除した場合:

oraConnection.Close();

接続を閉じることと破棄することは本質的に同じことなので、警告を取り除く必要があります。

また、try/finallyをusingステートメントに置き換えることもできます。

Microsoft独自のガイドラインでは、IDisposable.Disposeは、安全に複数回呼び出すことができるように実装する必要があるとされていることに注意してください。これは、CA2202のMSDNページのJoeM27によるコメントに記載されているように、CA2202の警告を安全に無視できることを意味します。

于 2010-06-28T07:00:23.083 に答える