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

C# Discussion :

Souci avec SqlTransaction


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Par défaut Souci avec SqlTransaction
    Salut,
    J'ai un gros soucis que je n'arrive pas à comprendre dans la transaction que j'ai écrite. Lorsqu'il y a une erreur, le Rollback ne marche et les entrées du haut ne sont pas annulées. J'utilise une base de données sql server 2008 et C# 2012.
    Voici la transaction que j'ai écrite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
     
       private void btnNouv_Click(object sender, EventArgs e)
            {
                #region Entete
                string title = Param.SoftName;
                if (ChampNonVide())
                {
                    if (MessageBox.Show(
                                           "Cette opération est irrévestible. Etes-vous de l'authenticité de vos entrées?",
                                           title, MessageBoxButtons.YesNo,
                                           MessageBoxIcon.Information,
                                           MessageBoxDefaultButton.Button1)
                                           == DialogResult.Yes)
                    {
                        if (mttlist < TotalVend)
                        {
                            decimal x;
     
                            if (MessageBox.Show(
                                                "L'encaissement est inférieur au solde. Voulez-vous vraiment l'encaisser ?",
                                                title, MessageBoxButtons.YesNo,
                                                MessageBoxIcon.Information,
                                                MessageBoxDefaultButton.Button1)
                                                == DialogResult.No)
                            {
                                return;
                            }
                        }
     
     
     
                        if (_CurrentReglement == null)
                            _CurrentReglement = new REGLEMENT();
                        _CurrentReglement.DTEOP = DateTime.Now;
     
                        _CurrentReglement.ID_SIM = IdSIM2;
                        _CurrentReglement.ID_Caissier = Param_Base.iduservENTE;
     
     
                        //_CurrentReglement.N_BORDEREAU = txtNBordereau.Text.Trim();
                        _CurrentReglement.REF_REGLEMENT = txtRefBR.Text.Trim();
                        //_CurrentReglement.MODEPAIEMENT = CboMPaie.Text.Trim();
                        _CurrentReglement.MTTREGLEMENT = MttPayer;
                        _CurrentReglement.IS_VALIDER = true;
                        _CurrentReglement.IS_COMPTABILISER = false;
                    }
                    else
                    {
                        return;
                    }
                #endregion
                    SqlTransaction transAchat = null;
                    try
                    {
                        if (DbConnectionInfo.DbConnection.State == ConnectionState.Closed)
                        {
     
                            DbConnectionInfo.DbConnection.Open();
                        }
     
                        transAchat = DbConnectionInfo.DbConnection.BeginTransaction();
     
                        //transAchat.Save();
     
                        _CurrentReglement.Save(transAchat);
     
                        idRef = _CurrentReglement.ID_AUTO;
     
                        #region Insertion dans la table Mouvement Caisse
                        //Ajouter detail Achat
     
     
                        _CurrentMvtCaisse = new MVT_CAISSE();
                        _CurrentMvtCaisse.DATEOP = DateTime.Now;
                        _CurrentMvtCaisse.LBLOPERATION = "Règlement de " + CboVM.Text.Trim();
                        _CurrentMvtCaisse.MTT_REPORT = oldSoldCaisse;
                        _CurrentMvtCaisse.MTT_CREDITE = 0;
                        _CurrentMvtCaisse.MTT_DEBITE = MttPayer;
                        _CurrentMvtCaisse.ID_CAISSE = Param_Base.iduservENTE;
                        _CurrentMvtCaisse.REF_MVEMENT = txtRefBR.Text.Trim();
                        _CurrentMvtCaisse.Save(transAchat);
     
     
                        #endregion
     
     
                        #region Entree Mouvement TransfertM2
     
                        _currentMTransfert = new MVT_TRANSFERT();
                        _currentMTransfert.REF_MVT = txtRefBR.Text.Trim();
                        _currentMTransfert.DATEOP = DateTime.Now;
                        _currentMTransfert.ID_SIM = IdSIM2;
                        _currentMTransfert.IS_ANNULER = false;
                        _currentMTransfert.LOGINPAS = Param_Base._loginpastor;
                        _currentMTransfert.OBSERVATION = "Inventaire N°" + txtRefBR.Text.Trim();
                        _currentMTransfert.STK_ANCIEN = initial;
                        _currentMTransfert.STK_ENTREE = 0;
                        _currentMTransfert.STK_SORTIE = MttCharger;
                        _currentMTransfert.STK_FINAL = CreditFinal;
                        _currentMTransfert.LOGINPAS = Param_Base._loginpastor;
                        _currentMTransfert.TypeSIM = TSIME;
                        _currentMTransfert.Save(transAchat);
     
                        #endregion
     
                        #region Détails Approvisionnement
                        //Ajouter detail Achat
     
                        int compteur = 0;
                        for (compteur = 0; compteur < _DetailReglementList.Count; compteur++)
                        {
                            _currentpayé = new DETAIL_REGLEMENT();
     
                            _currentpayé.ID_REGLEMENT = idRef;
                            _currentpayé.MONTANTPAYE = _DetailReglementList[compteur].MONTANTPAYE;
                            _currentpayé.NBORDEREAU = _DetailReglementList[compteur].NBORDEREAU;
                            _currentpayé.MODEPAIEMENT = _DetailReglementList[compteur].MODEPAIEMENT;
                            _currentpayé.AGENRT_PAYEUR = _DetailReglementList[compteur].AGENRT_PAYEUR;
                            _currentpayé.ID_BANK = idbank;
     
                            _currentpayé.Save(transAchat);
     
                        }
                        #endregion
     
                        #region Mouvements du dépôt
                        // MOuvement de sortie sur le dépôt de Vente
     
     
                        _currentRelevéVM = new RELEVECPTE_VM();
                        //_currentRelevéVM.Id_Famille = _RelevéList[0].
                        //_currentRelevéVM.ID_SIM
     
                        _currentRelevéVM.ID_SIM = IdSIM2;
                        _currentRelevéVM.LBLMVT = "Règlement " + CboVM.Text.Trim();
                        _currentRelevéVM.SOLDE_REPORT = _RelevéList[0].SOLDECPTE;
                        _currentRelevéVM.MTT_CREDIT = MttPayer;
                        _currentRelevéVM.MTT_DEBIT = 0;
                        _currentRelevéVM.N_BORDEREAU = txtRefBR.Text.Trim();
                        _currentRelevéVM.SOLDECPTE = FinSoldVM;
                        _currentRelevéVM.DATEOP = DateTime.Now;
                        _currentRelevéVM.Save(transAchat);
     
                        #endregion
                        transAchat.Commit();
     
                        //string title = Param.SoftName;
                        string message = string.Format("Règlement effectué avec succès.");
                        MessageBox.Show(message, title, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        //EmptyFields();
                    }
                    catch (SqlException ex)
                    {
                        transAchat.Rollback();
                        //string title = Param.SoftName;
                        string message = string.Format("Une erreur est survenue. Raison: {0}", ex.Message);
                        MessageBox.Show(message, title, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        //_Currentvente = null;
                    }
                }
            }
    Veuillez m'aider SVP...

  2. #2
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut
    Tu ne fais un rollback que si une exception de type SqlException est rencontrée... Or tout autre type d'exception peut arriver ! Il est préférable de faire un catch (Exception ex) à la place...

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Par défaut
    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il vaut mieux utiliser un bloc using pour ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    using (var transaction = connection.BeginTransaction())
    {
         // Operations à faire dans la transaction
         ...
     
         transaction.Commit();
    }
    En cas d'erreur, le Commit n'est pas exécuté ; la sortie du bloc using cause l'appel à Dispose sur la transaction, ce qui a pour effet de faire un Rollback si Commit n'avait pas été appelé

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

Discussions similaires

  1. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13
  2. SOucis avec une reequete imbriquee
    Par Ni4k dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/03/2004, 08h56
  3. souci avec un algorithme
    Par slider16 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 22/03/2004, 17h17
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

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