Domanda

In questa frase:

myCommand.ExecuteReader(CommandBehavior.CloseConnection)

chiude la connessione in caso di eccezione?

È stato utile?

Soluzione

Esistono molti modi in cui il comando può andare storto.

Alla fine è il metodo Close del lettore di dati a chiudere la connessione, purché nulla sia andato storto prima.

Se si verifica un'eccezione all'interno di ExecuteReader o in uno dei suoi metodi chiamati, prima che venga costruito l'oggetto DataReader effettivo, allora no, la connessione non verrà chiusa.

In caso di un'eccezione, non mi fiderei di chiudere la connessione.

Altri suggerimenti

Il modo più sicuro per fare un "normale" la query è

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

Eccezioni possono essere individuate al di fuori di questo codice.

Dipende da dove si verifica l'eccezione!

Se strutturi correttamente il tuo tentativo di cattura, andrà bene.

Ad esempio:

SqlCommand myCommand = new SqlCommand();

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

Se la riga: myCommand.ExecuteReader (CommandBehavior.CloseConnection) non riesce (forse il database è inattivo?), la connessione non può essere chiusa a livello di programmazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top