2008-10-21 10 views

Répondre

3

Il existe de nombreuses façons dont la commande peut mal tourner.

Finalement, c'est la méthode Close du lecteur de données qui fermera la connexion, à condition que rien ne se passe mal avant.

S'il existe une exception qui se produit dans ExecuteReader ou l'une de ses méthodes appelées, avant que l'objet DataReader réel est construit, alors non, la connexion ne sera pas fermée.

En cas d'exception, je ne ferais pas confiance à la fermeture de la connexion.

0

Cela dépend où l'exception se produit!

Si vous structurez votre try correctement, ça ira.

Par exemple:

SqlCommand myCommand = new SqlCommand(); 

try 
{ 
    myCommand.dostuff(); 
} 
catch(Exception ex) 
{ 
    // display error message 
} 
finally 
{ 
    myCommand.ExecuteReader(CommandBehavior.CloseConnection); 
} 

Si la ligne: myCommand.ExecuteReader (CommandBehavior.CloseConnection) échoue (? Peut-être la base de données a baissé), la connexion ne peut être fermé par programme.

7

La meilleure façon de faire une requête « normale » est

using (var conn = new SqlConnection("...")) 
{ 
    conn.Open(); 
    using (var cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = "..."; 
     using (var reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       // ... 
      } 
     } 
    } 
} 

Des exceptions peuvent être pris en dehors de ce code.