Supposons que je fais ce qui suit:ADO.NET, Fermeture d'une connexion Oracle sans validation préalable ou annulation: Fuite?
using (OracleConnection conn = new OracleConnection(connStr))
{
OracleTransaction trans = conn.BeginTransaction();
OracleCommand command = new OracleCommand(cmdTxt, conn, trans);
// this statement is executed in a transaction context:
command.ExecuteNonQuery();
}
// the using statement will dispose and thus close the connection.
// a rollback is done implicitly
Bien que je ne l'ai pas exécuté transaction.Rollback()
, mes tests ont montré qu'un rollback est fait implicitement.
Ma question est: Ce code va-t-il fuir les connexions ou autre chose?
Édition1: Je suis l'espace de noms System.Data.OracleClient
.
Édition2: Ceci est un exemple de code traité. Le scénario le plus réaliste est lorsque dans l'instruction using une exception se produit et que l'instruction Commit()
n'est pas encore exécutée.
Edit3: De la réponse que je pense que ce qui est favorable:
using (OracleConnection conn = new OracleConnection(connStr))
using (OracleTransaction trans = conn.BeginTransaction())
using (OracleCommand command = new OracleCommand(cmdTxt, conn, trans))
{
command.ExecuteNonQuery();
trans.Commit();
}
Si proprement jeter quoi que ce soit et clairement ce qui se passe.
Même avec OracleCommand, je suspecte. Tout ce qui est jetable doit être éliminé, probablement dans un bloc d'utilisation. –
Merci John - mis à jour. – itowlson