IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ADO.NET Discussion :

Créer une transaction englobante


Sujet :

ADO.NET

  1. #1
    Membre confirmé Avatar de joKED
    Profil pro
    Imposteur en chef
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Imposteur en chef

    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Points : 458
    Points
    458
    Par défaut Créer une transaction englobante
    Bonjour à tous,

    Pour valider un process d'insertion, je suis obligé d'appeler plusieurs procédures stockées successivement.
    Si à un moment donné, une procédure stockée retourne une erreur, je dois manuellement "rollback" tous les appels précédents. C'est plutôt fastidieux.
    N'y aurait il pas un moyen d'avoir une transaction globale (gérée par ADO.NET) qui pourrait rollback tout d'un seul coup ?

    Par donner un exemple de l'existant :
    En gros, j'insère des données dans la table A. La SP INSERT_INTO_A s'en occupe et me retourne un UID_A d'enregistrement.
    Si tout va bien j'utilise cet UID_A que je passe en paramètre de SP_INSERT_INTO_B qui me retourne un UID_B.
    Si tout va bien j'utilise cet UID_B que je passe en paramètre de SP_INSERT_INTO_C qui me retourne un UID_C.
    Etc.

    Bref, si à un moment donné, une SP se foire (pour une raison ou une autre), je n'ai pas le choix, il faut que j'aille faire le ménage dans toutes les tables qui ont été précédemment impactées. Et c'est super pas cool.

    Evidemment, je ne peux pas créer de nouvelle SP qui appellerait successivement mes autres SP (pas drôle hein), et je ne peux modifier aucune des SP existantes (pas drôle non plus).

    Je cherche donc un moyen côté ADO.NET de gérer une "transaction" englobante qui pourrait me faciliter la vie.

    Si quelqu'un a une piste à me conseiller, je suis preneur.

    Merci d'avance pour votre aide.
    Tant va la cruche à l'eau qu'à la fin y'a plus d'eau.

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    As-tu essayé ceci ?

    https://docs.microsoft.com/fr-fr/dot...tframework-4.8

    Quel SGBD utilises-tu ? (ici l'exemple c'est SQL Server)

    Tes procédures stockées contiennent-elles des transactions elle-mêmes ?
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Membre confirmé Avatar de joKED
    Profil pro
    Imposteur en chef
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Imposteur en chef

    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Points : 458
    Points
    458
    Par défaut
    SGBD : SQL Server 201x
    Chaque SP contient déjà sa propre transaction.

    Effectivement, la classe SqlTransaction pourrait tout à fait répondre à ma problématique, merci pour l'info.

    Toutefois, je suppose que les questions que tu as posées (quel sgbd et si les sp ont leur propre transaction) ne sont pas anodines, et qu'il doit y avoir des subtilités à prendre en compte. Peux tu développer le fond de ta pensée à ce sujet ?
    Tant va la cruche à l'eau qu'à la fin y'a plus d'eau.

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Le souci, c'est le coup de la transaction "englobante" il me semble que sur les anciennes versions de SQL Server il est impossible de faire des transactions imbriquées, uniquement des points de sauvegarde. C'est le cas aussi d'autres SGBD.

    Dans la doc de SQL Server 2012 déjà il y avait bien la notion de transaction imbriquée donc pas de problème.
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Membre confirmé Avatar de joKED
    Profil pro
    Imposteur en chef
    Inscrit en
    Février 2006
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Imposteur en chef

    Informations forums :
    Inscription : Février 2006
    Messages : 337
    Points : 458
    Points
    458
    Par défaut
    Bonjour,

    Merci pour la précision.
    J'ai fait quelques tests, ça semble fonctionner correctement.
    Je clos donc cette discussion, merci pour l'aide apportée.
    Tant va la cruche à l'eau qu'à la fin y'a plus d'eau.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/09/2009, 15h19
  2. Réponses: 2
    Dernier message: 09/03/2009, 11h12
  3. [Réseau] Créer une connexion Internet
    Par Tranber dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 17/10/2002, 17h01
  4. Créer une fenêtre flottante qui ne peut avoir le focus
    Par BestofMac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 10h46
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo