Question

Dans cette phrase:

myCommand.ExecuteReader(CommandBehavior.CloseConnection)

ferme-t-il la connexion en cas d'exception?

Était-ce utile?

La solution

La commande peut mal tourner de nombreuses manières.

En fin de compte, c’est la méthode Close du lecteur de données qui ferme la connexion, à condition que tout se soit bien passé.

Si une exception se produit dans ExecuteReader ou dans l'une de ses méthodes appelées avant la construction de l'objet DataReader, alors non, la connexion ne sera pas fermée.

En cas d'exception, je ne me fierais pas à cela pour fermer la connexion.

Autres conseils

Le moyen le plus sûr de faire un " normal " la requête 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 interceptées en dehors de ce code.

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

Si vous structurez correctement votre capture d’essai, tout ira bien.

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 (la base de données est peut-être tombée en panne?), la connexion ne peut pas être fermée par programme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top