J'ai une IDbTransaction dans une instruction using mais je ne sais pas si elle sera annulée si une exception est levée dans une instruction using. Je sais qu'une instruction using imposera l'appel de Dispose () ... mais quelqu'un sait-il si c'est la même chose pour Rollback ()?
pdate: Aussi, dois-je appeler explicitement Commit () comme je l'ai ci-dessous ou cela sera-t-il également pris en charge par l'instruction using?
Mon code ressemble un peu à ceci:
using Microsoft.Practices.EnterpriseLibrary.Data;
...
using(IDbConnection connection = DatabaseInstance.CreateConnection())
{
connection.Open();
using(IDbTransaction transaction = connection.BeginTransaction())
{
//Attempt to do stuff in the database
//potentially throw an exception
transaction.Commit();
}
}
La méthode Dispose pour la classe de transaction effectue une restauration, contrairement à la classe Oracle. Du point de vue de la transaction, cela dépend donc de l'implémentation.
L'instruction using
pour l'objet de connexion, d'autre part, fermerait la connexion à la base de données ou renverrait la connexion au pool après sa réinitialisation. Dans les deux cas, les transactions en cours doivent être annulées. C'est pourquoi une exception ne laisse jamais traîner une transaction active.
De plus, oui, vous devez appeler Commit()
explicitement.
Vous devez appeler commit. L'instruction using n'engage rien pour vous.
Je crois que s'il y a une exception telle que Commit()
n'a jamais été appelée, alors la transaction sera automatiquement annulée.