6
votes

Implémentation des transactions sur plusieurs bases de données

Je pratique des modifications de données sur plusieurs bases de données et je souhaite mettre en œuvre une transaction qui couvrira toutes les modifications.

C'est ce que j'ai actuellement: P>

try
{
    db[1].begintransaction();
    db[1].ExecuteNonQuery();

    db[2].begintransaction();
    db[2].ExecuteNonQuery();

    ...

    db[N].begintransaction();
    db[N].ExecuteNonQuery();

    // will execute only if no exception raised during the process
    for (int a = 0; a < N; a++)
    {
        db[a].Commit();// what if there is an error/exception here
    }
}
catch
{
    for (int a = 0; a < N; a++)
    {
        db[a].RollBack();
    }
}


2 commentaires

Remarque: Ce n'est pas le code réel. ive la modifiait considérablement pour la clarté


Hey, je reçois le même problème ... et mes bases de données peuvent être un serveur MySQL et SQL ... fonctionnera-t-il avec TransactionsCope?


4 Réponses :


13
votes

Utilisez le transactionsCope classe comme ceci:

using (TransactionScope ts = new TransactionScope())
{
    //all db code here

    // if an error occurs jump out of the using block and it will dispose and rollback

    ts.Complete();
}


2 commentaires

@Jesse, je pense que pour la transaction entre bases de données, même dans la dernière version de .NET, le coordonnateur de la transaction distribuée Microsoft sera nécessaire. Je n'ai pas pu comprendre pourquoi vous avez dit que cela ne sera pas nécessaire?


@Sunil vous avez totalement raison. C'était un malentendu de ma part du framework .NET à l'époque. Je vais procéder pour supprimer le commentaire erroné. Merci de m'avoir aveuglé! =)





1
votes

Utilisation de transactionsCope est la réponse. Il fonctionne même avec différents SGBD !!!

Transactions sur plusieurs bases de données


0 commentaires