Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#] SqlCommand transaction avec requête paramétrée

Sujet résolu
    27 novembre 2008 à 21:11:02

    Bonjour à tous ;)

    je débute avec les requêtes paramétrées en c#. Et j'ai un exemple ici ou je fais un select et ensuite selon le résultat je fais un insert. Bien sûr je dois faire une transaction pour ces des actions (je n'ai pas encore défini le niveau d'isolation).

    public static int ajouterModele(Marque marq, Modele mod)
        {
            int res = 0;
    
            using (SqlConnection connection = new SqlConnection(connexionString))
            {
    
                int nb;
    
    
    
                SqlParameter paramNomMod = new SqlParameter("@nom_modele", SqlDbType.VarChar, 50);
                paramNomMod.Value = mod.nomMod;
    
                SqlParameter paramNomMarq = new SqlParameter("@nom_marque", SqlDbType.VarChar, 50);
                paramNomMarq.Value = marq.nomMarq;
    
                string select = string.Format("SELECT COUNT(*) FROM Modele WHERE nom_modele={1})", paramNomMod.ParameterName);
    
                SqlCommand cmdSelect = new SqlCommand(select.ToString(), connection);
                cmdSelect.Parameters.Add(paramNomMod);
    
                string insert = string.Format("INSERT INTO Modele (nom_modele,nom_marque) VALUES ({1},{2})", paramNomMod.ParameterName, paramNomMarq.ParameterName);
    
    
                SqlCommand cmdInsert = new SqlCommand(insert.ToString(), connection);
                cmdInsert.Parameters.Add(paramNomMod);
                cmdInsert.Parameters.Add(paramNomMarq);
    
                connection.Open();
    
                SqlTransaction transaction;
    
                transaction = connection.BeginTransaction("enregistrerModele");
    
                cmdSelect.Transaction = transaction;
                cmdInsert.Transaction = transaction;
    
                try
                {
                    nb = (int)cmdSelect.ExecuteScalar();
                    if (nb <= 0)
                    {
                        cmdInsert.ExecuteNonQuery();
                        res = 1;
                    }
    
                }
                catch (Exception ex)
                {
                    res = -2;
                    // Attempt to roll back the transaction.
                    try
                    {
                        transaction.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        res = -2;
                    }
                }
    
                
            }
    
            return res;
    }
    


    J'aimerai donc avoir un avis sur cette petite méthode. Et surtout savoir si je fais comme ça pour mes transactions, si les deux commandes seront biens protégées par la même transaction.

    transaction = connection.BeginTransaction("enregistrerModele");
    
                cmdSelect.Transaction = transaction;
                cmdInsert.Transaction = transaction;
    


    Merci de votre avis :)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      27 novembre 2008 à 21:28:28

      Oui, tout à fait.

      De toutes facons, si tu execute un SQLCommand alors qu'une transaction est active, et que cette derniere n'a pas etait affecté à un SQLCommand, une exception devrait etre levée.

      Par contre, il faut faire un .Commit() sur l'objet de transaction, sinon les changements ne seront pas fait.

      Mais le principe est la :

      try
      {
          // les executes des command
      
          transaction.Commit();
      }
      catch(Exception e)
      {
          try
          {
              transaction.Rollback();
          }
          catch (Exception e)
          {
               // Rollback echoué
          }
      }
      
      • Partager sur Facebook
      • Partager sur Twitter
        27 novembre 2008 à 21:35:59

        Oups c'est vrai, j'ai oublié le commit. Je suis désolé ;)

        J'avais mis dans mon ancienne version en plus.

        Merci pour ta réponse SirJulio
        • Partager sur Facebook
        • Partager sur Twitter

        [C#] SqlCommand transaction avec requête paramétrée

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown