none
Realisation de plusieurs instructions RRS feed

  • Question

  • bonjour

    je realise plusieurs instructions comme le montre le code suivant :

     for (int l = 0; l <= FicheAnalyseRPT.Tables[0].Rows.Count - 1; l++)
                {
                    string DosID = FicheAnalyseRPT.Tables[0].Rows[l][0].ToString();
                    //MAJ
                    // recupere la valeur de l ID SendFile
                    var idParam_SfID = new SqlParameter
                    {
                        ParameterName = "@SfiId",
                        SqlDbType = SqlDbType.UniqueIdentifier,
                        Direction = ParameterDirection.Output
                    };
                     MAJ = ExecuteRequete.ExecuteStoredProcedure("MAJStatutDossier_EnregistrementSendFile_InterpolDPF", new SqlParameter("@StaId", 8), new SqlParameter("@DosID", DosID),
                            new SqlParameter("@staBL", null), new SqlParameter("@staCRprod", null), idParam_SfID, new SqlParameter("@SfiRefDoc", RefCourrier));
                 }
                // recupere la valeur de l ID FichierEnvoyer
                var idParam_FilID = new SqlParameter
                {
                    ParameterName = "@filID",
                    SqlDbType = SqlDbType.UniqueIdentifier,
                    Direction = ParameterDirection.Output
                };
                //enregistrement de la transmission
                RecFile = ExecuteRequete.ExecuteStoredProcedure("EnregistreFile", idParam_FilID, new SqlParameter("@fillNameSend", RefCourrier),
                        new SqlParameter("@filDateSend", DateTime.Today.Date),
                        new SqlParameter("@filNameReturn", null), new SqlParameter("@filDateReturn", null),
                        new SqlParameter("@filSceDest", null), new SqlParameter("@filDateRelance", null), new SqlParameter("@filRefRelance", null));
                //            

    j'aimerais tout annuler si une des instructions ne se deroulement pas complement ou correctement

    comment proceder.

    Merci


    Marcelle NGOUNOU

    jeudi 19 juillet 2012 08:44

Réponses

  • Bonjour,

    Préférez l'utilisation de TransactionScope qui est beaucoup plus simple à utiliser (il faut ajouter une référence à System.Transactions) :

    using (TransactionScope transaction = new TransactionScope())
    {
        // Votre code
        // ...
        
        // Valider la transaction
        transaction.Complete();
    }
    Si vous sortez du bloc using (soit proprement, soit via une exception) et que vous n'appellez pas la méthode Complete() un ROLLBACK au niveau de votre SGBD sera automatiquement réalisé.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    jeudi 19 juillet 2012 11:47
    Modérateur
  • Bonjour,

    Il faut exécuter les commandes dans le cadre d'une transaction.

    Ado .NET le permet très facilement :

    http://msdn.microsoft.com/fr-fr/library/2k2hy99x(v=vs.71).aspx

    Cordialement.

    jeudi 19 juillet 2012 09:36
    Auteur de réponse

Toutes les réponses

  • Bonjour,

    Il faut exécuter les commandes dans le cadre d'une transaction.

    Ado .NET le permet très facilement :

    http://msdn.microsoft.com/fr-fr/library/2k2hy99x(v=vs.71).aspx

    Cordialement.

    jeudi 19 juillet 2012 09:36
    Auteur de réponse
  • Bonjour,

    Préférez l'utilisation de TransactionScope qui est beaucoup plus simple à utiliser (il faut ajouter une référence à System.Transactions) :

    using (TransactionScope transaction = new TransactionScope())
    {
        // Votre code
        // ...
        
        // Valider la transaction
        transaction.Complete();
    }
    Si vous sortez du bloc using (soit proprement, soit via une exception) et que vous n'appellez pas la méthode Complete() un ROLLBACK au niveau de votre SGBD sera automatiquement réalisé.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    jeudi 19 juillet 2012 11:47
    Modérateur
  • bonjour,

    Merci a tous!


    Marcelle NGOUNOU

    jeudi 26 juillet 2012 15:06