2010-06-22 9 views
0

Nous recevons l'avertissement suivant de l'analyse de code dans Visual Studio 2010 et je me demande s'il s'agit d'un faux positif que nous pouvons ignorer en toute sécurité ou le code doit être refactorisé pour disposer correctement le objet.CA2202 Mise en garde de Code Analysis for OracleConnection élimination

Le code correspondant:

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

Le message d'erreur correspondant:

Warning 18 CA2202: Microsoft.Usage: Object 'oraConnection' peut être disposé plus d'une fois dans la méthode « NomClasse. MyFunction() '. Pour éviter de générer une exception System.ObjectDisposedException, vous ne devez pas appeler Dispose plus d'une heure sur un objet.

Répondre

1

Si vous supprimez la ligne:

oraConnection.Close(); 

il devrait se débarrasser de l'avertissement, car la fermeture et la disposition d'une connexion sont essentiellement la même chose.

Vous pouvez également remplacer votre try/finally par une instruction using.

Notez que les directives propres à Microsoft indiquent que IDisposable.Dispose doit être implémenté de manière à pouvoir être appelé plusieurs fois en toute sécurité. Ce qui signifie que l'avertissement CA2202 peut être ignoré en toute sécurité, comme indiqué dans the comment by JoeM27 on the MSDN page for CA2202.

+0

J'ai cherché dans la documentation Oracle pour ODP.NET et ils ont indiqué que OracleConnection.Dispose() appelait la méthode Close afin que les directives soient mises à jour pour appeler la méthode Dispose. – rjzii