none
Invalid MSDTC on server RRS feed

  • Question

  • Bonjour,

    j'utilise le code suivant 


     private void Cmd_PrintFichRensRPT_Click(object sender, EventArgs e)
            {
                bool MAJ = false;
    
                if (DTGVFicheRensRPT.RowCount != 0)
                {
                    using (TransactionScope transaction = new TransactionScope())
                    {
                        try
                        {
                            for (int l = 0; l <= DTGVFicheRensRPT.RowCount - 1; l++)
                            {
                                string DosID = DTGVFicheRensRPT.Rows[l].Cells[8].Value.ToString();
                                //MAJ
                                MAJ = ExecuteRequete.ExecuteStoredProcedure("MAJStatutDossier", new SqlParameter("@StaId", 11), new SqlParameter("@DosID", DosID),
                                       new SqlParameter("@staBL", null), new SqlParameter("@staCRprod", null));
                            }
                        }
                        catch (Exception Message)
                        {
                            MessageBox.Show(Message.ToString()); 
                        }
                        // Valider la transaction
                        transaction.Complete();
                    }
                    if (MAJ )
                    {
                        CRV_FichRensRPT.PrintReport();
                        UtilsProcFunc.Edition(this, 1);  
                    }
                    else
                    { UtilsProcFunc.Edition(this, 1); }
                }
                else
                {
     
                }
            }

    seulement voila après la 1 ere mise ç jour, à la seconde j'ai l'erreur suivante :"Invalid MSDTC on server MarcelleNGOUNOU\SQLEXPRESS is unavailable for prameter MachineName"

    Je n'y comprends rien pourtant la valeur recupere par DOs_ID est bien OK.

    De plus malgré cette erreur, il y a bien validation de la 1ere ligne et pas de la seconde, ...

    Merci pour votre aide


    Marcelle NGOUNOU



    • Modifié marclas mardi 28 août 2012 16:13
    mardi 28 août 2012 14:41

Réponses

  • Bonjour,

    Pouvez-vous nous indiquer EXACTEMENT le message d'erreur que vous obtenez ?

    Regardez dans les services Windows si le "Coordinateur de transaction distribués" n'est pas désactivé (il doit être à Manuel ou Automatique).

    Afin d'optimiser vos requêtes, évitez de faire appel à MSDTC. Pour cela essayez d'utiliser la même connexion pour exécuter plusieurs requêtes SQL. Créer et ouvrez donc une connexion avant la création du TransactionScope. Fermez la connexion après la fin du TransactionScope. Passez cette connexion en paramètre à la méthode ExecuteStoredProcedure et utilisez cette connexion dans votre SqlCommand.

    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

    • Marqué comme réponse marclas mercredi 29 août 2012 19:45
    mardi 28 août 2012 22:59
    Modérateur

Toutes les réponses

  • Bonjour,

    Pouvez-vous nous indiquer EXACTEMENT le message d'erreur que vous obtenez ?

    Regardez dans les services Windows si le "Coordinateur de transaction distribués" n'est pas désactivé (il doit être à Manuel ou Automatique).

    Afin d'optimiser vos requêtes, évitez de faire appel à MSDTC. Pour cela essayez d'utiliser la même connexion pour exécuter plusieurs requêtes SQL. Créer et ouvrez donc une connexion avant la création du TransactionScope. Fermez la connexion après la fin du TransactionScope. Passez cette connexion en paramètre à la méthode ExecuteStoredProcedure et utilisez cette connexion dans votre SqlCommand.

    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

    • Marqué comme réponse marclas mercredi 29 août 2012 19:45
    mardi 28 août 2012 22:59
    Modérateur
  • Bonjour,

    effectivement, "Coordonateur..." etait desactivé je l'ai passé en automatique.

    par contre, vous dites que je devrais eviter de faire appel a MSDTC, je ne sais pas comment j'y fais appel.

    kan a la connxion, dans ls procedure d'execution generique d'une requete y'a l'ouverture de la conenexion et sa cloture

    exemple

    public static   class ExecuteRequete
        {
    
            //initialisation de la connexion à la base de données SQL Server
            private static SqlConnection m_Connexion;
            //déclaration de l'objet command
            private static SqlCommand m_commande;
            /// <summary>
            /// Instancier et initialiser les objets de connecxion
            /// </summary>
            /// <remarks></remarks>
            public static void InitConnexionMobile()
            {
                try
                {
                    //instancier l'objet de connexion
                    m_Connexion = new SqlConnection(Properties.Settings.Default.cnStr);
    
                    //Ouvrir la connexion à la bd
                    m_Connexion.Open();
    
                    //creer la commande et indiquer le type de commande
                    m_commande = m_Connexion.CreateCommand();
                    m_commande.CommandType = CommandType.StoredProcedure;
                }
                catch (Exception ex)
                {
                    //lever une exception et l'ecrire dans le journal d'événement windows
                    EventLog.GetEventLogs(ex.Message);
                }
    
            }
    
            /// <summary>
            /// Ferme la connexion à la base de données et libere les ressources
            /// </summary>
            /// <remarks></remarks>
            public static void Dispose()
            {
                m_commande.Dispose();
                m_Connexion.Close();
                m_commande = null;
                m_Connexion = null;
            }
    
            #region "Fonctions d'aide"
            /// <summary>
            /// Exécuter une requete sql dynamique de mise à jour de la base
            /// </summary>
            /// <param name="chaineSql"></param>
            /// <remarks></remarks>
            public static void ACTIONExecuteRequeteSansRetour(string chaineSql)
            {
                InitConnexionMobile();
                m_commande.CommandText = chaineSql;
                try
                {
                    m_commande.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    // ReSharper disable PossibleIntendedRethrow
                    throw ex;
                    // ReSharper restore PossibleIntendedRethrow
                }
                finally
                {
                    Dispose();
                }
            }
    }


    Marcelle NGOUNOU

    mardi 28 août 2012 23:34
  • Bonjour,

    Faites en sorte de passer la connexion en paramètre à votre méthode ACTIONExecuteRequeteSansRetour() et d'utiliser cette connexion pour exécuter la commande.

    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

    mercredi 29 août 2012 22:33
    Modérateur