Bonjour,
Je m'apprête à écrire plusieurs procédures stockées sur SQL Server qui me permettront de migrer une base de données 2007, vers sa nouvelle version 2008
Je devrai ensuite à appeller toutes ces procédures stockées depuis C# avec ADO.NET, au sein d'une transaction bien entendu, pour conserver l'intégrité des données en cas d'erreur.
Mes 2 bases de données en question se trouvent sur le même serveur SQL.
Dois je passer par une transaction distribuée dans ce cas ou c'est pas la peine puisqu'elles sont sur le même serveur ?
Car, comme j'instancie la transaction depuis ADO.NET et pas dans la/les procédures stockées, j'hésite à utiliser la classe "TransactionScope" d'ADO.NET ou non. Ca m'arrangerai d'utiliser une simple "Transaction" normale d'ADO.NET pour certaines raisons.
J'ai lu ceci sur http://msdn.microsoft.com/fr-fr/library/ms191440.aspx :
"Une transaction exécutée sur une seule instance du Moteur de base de données, mais utilisant plusieurs bases de données, est en réalité une transaction distribuée. Cette instance gère la transaction distribuée de manière interne ; elle apparaît comme une transaction locale pour l'utilisateur."
Ce qui me laisse sous entendre qu'une transaction "normale" (BEGIN TRANSACTION et pas par exemple BEGIN DISTRIBUTED TRANSACTION) suffirait. Ou bien je sous entend mal ?
En gros, quand je code en C# avec ADO.NET, j'instanciais jusqu'à maintenant une transaction dans le code C# en faisant un :
SqlTransaction maTransaction = new maTransaction();
mais maintenant que j'attaque 2 bases différentes dans mes procédures stockées, est ce que ça va le faire aussi ?
Ou bien faut que je passe par un TransactionScope :
using (TransactionScope monScope = new TransactionScope())
{
// code SQL
}
Ca m'arrangerai de pas utiliser une TransactionScope, car j'ai pas mal d'objet déjà conçu avec des Transactions toute simple dans ma couche d'accès aux données.
D'avance merci pour toute informations
Partager