J'ai un problème et tous les articles ou exemples que j'ai trouvés ne semblent pas s'y intéresser.Impossible d'accéder à l'objet SqlTransaction pour l'annuler dans le bloc catch
Je souhaite effectuer des actions de base de données dans une transaction. Ce que je veux faire est très similaire à la plupart des exemples:
using (SqlConnection Conn = new SqlConnection(_ConnectionString))
{
try
{
Conn.Open();
SqlTransaction Trans = Conn.BeginTransaction();
using (SqlCommand Com = new SqlCommand(ComText, Conn))
{
/* DB work */
}
}
catch (Exception Ex)
{
Trans.Rollback();
return -1;
}
}
Mais le problème est que la SqlTransaction Trans
est déclarée à l'intérieur du bloc try
. Il n'est donc pas accessible dans le bloc catch()
. La plupart des exemples font Conn.Open()
et Conn.BeginTransaction()
avant le bloc try
, mais je pense que c'est un peu risqué, car les deux peuvent lancer plusieurs exceptions.
Ai-je tort, ou la plupart des gens ignorent-ils ce risque? Quelle est la meilleure solution pour pouvoir revenir en arrière, si une exception se produit?
P.S. Êtes-vous sûr de vouloir retourner -1 (un code d'erreur) au lieu de lancer une exception? –