Bonjour,
2 petites questions à propos des transactions.
Le contexte :
Je m'occupe d'un module de transferts de données entre 2 systèmes dont l'un utilisant une BDD SQLServer 2008R2 et l'autre est représenté par des fichiers EDIFACT.
Ce module est découpé en 9 services (un pour chaque flux), chaque flux dispose de sa connexion au SGBD.
Donc soit un service intègre un flux EDIFACT dans une BDD SQL Server, soit il génère un flux EDIFACT à partir de la BDD.
Dans le cas des réceptions, j'ai énormément de requêtes pour intégrer (gestion de stock notamment) tous les éléments du flux EDI en BDD et j'intègre la totalité de ces requêtes dans une seule et unique transaction.
Pour donner un ordre d'idée ça peut aller jusqu'à 50 requêtes de tous types (SELECT, UPDATE, INSERT et DELETE) entre le BEGIN et le COMMIT.
Au niveau du code, nous utilisons Windev (pas le choix :'( ). Mon code appelant au niveau le plus haut est encadré par un équivalent de Try Catch. Le BEGIN est appelé au début du Try, le COMMIT juste en dehors et le ROLLBACK est dans le Catch.
Dans les méthodes de niveau inférieur, toute erreur lève ou est propagée en une exception. On finit donc systématiquement par un Rollback en cas d'erreur.
Le code SQL d'initialisation d'une transaction est le suivant :
Le code SQL de fin de transaction est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part BEGIN TRANSACTION;
Le code SQL de rollback est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part COMMIT TRANSACTION;
Les transactions ne sont donc pas nommées, mais comme chaque service a sa propre connexion cela ne devrait pas poser de problème. Si ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ROLLBACK TRANSACTION;
A l'arrivée, je constate que ça ne fonctionne pas. Lors que j'ai une erreur, les requêtes de modification de la BDD précédant l'erreur sont toujours actives après l'exécution du service.
Quelqu'un aurait-il une piste pour localiser le dysfonctionnement ?
Serait-ce du à l'absence de nommage des transactions ?
Au nombre de requêtes dans les transactions ?
A autre chose que je ne connais pas ?
Voilà. Sinon dernière info le niveau d'isolation n'est pas modifié, il est en READ COMMITTED.
Merci.
Partager