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 est-ce que quelqu'un sait si la même chose est vraie pour Rollback()?Une instruction using annulera-t-elle une transaction de base de données si une erreur se produit?
Mise à jour: Aussi, dois-je appeler Commit() explicitement comme je l'ai ci-dessous ou sera-t-il également pris en charge par l'instruction using?
Mon code ressemble un peu comme 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();
}
}
Salut, juste pour clarifier le cas "commit". Il est bien sûr obligatoire car, using() {} appelle simplement la méthode Dispose(). La classe Transaction.Dispose ne pouvait pas savoir si elle devait Commit ou Dispose si la validation était également automatique :) –
Voir aussi http://stackoverflow.com/questions/6418992/is-it-a-better-practice-to-explicitly -call-transaction-rollback-or-let-an-except – nawfal