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

Accès aux données Discussion :

[C#/MySQL] Peut-on faire plusieurs requêtes dans une Transaction ?


Sujet :

Accès aux données

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 181
    Points
    181
    Par défaut [C#/MySQL] Peut-on faire plusieurs requêtes dans une Transaction ?
    Bonjour à tous,

    j'aimerai savoir s'il est possible dans une transaction de faire plusieurs requêtes d'insertion. En effet j'ai 5 requetes d'insertion a faire dans la meme page. J'ai mis en exemple les requetes 1 et 2. Comment m'y prendre pour réaliser toutes ces requêtes en meme temps?

    Voici mon code :

    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
     
    //Requete d'insertion des tarifs
    string requete1 = "INSERT INTO tarif VALUES (";
    requete1 = requete1 + "'" + numloc +  " ', " ;
    requete1 = requete1 + "'" + 1 + "', '" ;		
    requete1 = requete1 + hiver + "');" ;
     
    string requete2 = "INSERT INTO tarif VALUES (";
    requete2 = requete2 + "'" + numloc +  " ', " ;
    requete2 = requete2 + "'"  + 2 + "', '" ;
    requete2 = requete2 + prin + "');" ;
     
    MySqlCommand insertionprix = new MySqlCommand();
    insertionprix =  maCnx.CreateCommand();
     
    try
    {
      //Debut de la transaction
      MySqlTransaction myTrans=maCnx.BeginTransaction();
    	try
    	{
    	  insertionprix.CommandText=requete;
    	  insertionprix.Transaction=myTrans;						
    	  insertionprix.ExecuteNonQuery();
    	  myTrans.Commit();
    	  MessageBox.Show("Le tarif a été ajouté.","Insertions réussies",
     	 MessageBoxButtons.OK,MessageBoxIcon.Information);
    	}
    	catch ( SqlException err ) 
    	{
    	  //Message en cas d'erreur
    	  MessageBox.Show( "Exceptionin RefreshListBox: " + err.Message
         +"sqlcode=" + err.Number);
    	  myTrans.Rollback();		
    	}

  2. #2
    Membre habitué Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Points : 177
    Points
    177
    Par défaut
    Saut Ben42,

    Après le début de la transaction, il est possible de faire plusieurs "ExecuteNonQuery" de requêtes différentes dans ce gout:

    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
     
     
    try
    {
     
    insertionprix.Transaction=myTrans;
    insertionprix.CommandText=requete1;	
    insertionprix.ExecuteNonQuery();
    insertionprix.CommandText=requete2;	
    insertionprix.ExecuteNonQuery();
    insertionprix.CommandText=requete3;	
    insertionprix.ExecuteNonQuery();
    (...etc...)
    myTrans.Commit();
    (...)
    }
    Ou bien mettre toutes les requêtes dans une chaine (en pensant à bien les ponctuer par ";")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
     
    try
    {
    requete = requete1 & requete2 & requete3 & requete4 & requete5
    insertionprix.Transaction=myTrans;
    insertionprix.CommandText=requete;	
    myTrans.Commit();
    (...)
    }
    "On peut dire qu’il est possible de savoir comment vaincre sans être capable de le faire" - Sun Tze, in L'art de la guerre

    "Mais t'es complètement naze ou quoi ?! UNE pomme ! ça fait DEUX moitiés de pomme !! mais quand vas-tu le comprendre ?! J'en ai ma claque, j'me tire !" - Bouddha et un disciple, dans un moment de faiblesse

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 181
    Points
    181
    Par défaut
    Merci beaucoup pour ton aide, ça marche très bien avec la première solution

  4. #4
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Ma question rejoint la précédante.
    Pour la transaction en C# pas de problème.
    par contre, mon besoin est de faire une transaction MULTIBASES !!!

    mon provider MySql est 5.1.2.2 (mais il m'est possible de passer au 6.x en cas de besoin)

    On m'a parlé du TransactionScope, mais je ne comprends pas bien ce que j'ai trouvé sur le net.

    Un coup de main serait le bienvenu.

    p.s. : je suis en C# 3.5
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par kheironn Voir le message
    Ma question rejoint la précédante.
    Pour la transaction en C# pas de problème.
    par contre, mon besoin est de faire une transaction MULTIBASES !!!

    mon provider MySql est 5.1.2.2 (mais il m'est possible de passer au 6.x en cas de besoin)

    On m'a parlé du TransactionScope, mais je ne comprends pas bien ce que j'ai trouvé sur le net.

    Un coup de main serait le bienvenu.

    p.s. : je suis en C# 3.5
    Les transactions sont quasi impossibles à gérer de manière simple. Ca se fait via l'utilisation de MSDTC mais c'est... pfiou!

  6. #6
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Bref, vive T-SQL... MSQL reste une base assez peu performanate...
    Oracle va-t-il amméliorer ce produit ou le supprimer ?
    Bon, je reste sur une méthode de Transaction C# pour chaque connexion.
    Vivement qu'on achète notre licence pour un véritable SGBD !!!
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/08/2012, 13h14
  2. quel etl peut faire ca : charger un pdf dans une colonne BLOB
    Par sulfurex dans le forum Alimentation
    Réponses: 0
    Dernier message: 09/04/2010, 10h01
  3. [XL-2003] Peut-on faire un update de table sur une connexion ODBC avec Excel ?
    Par tibofo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/11/2009, 18h12
  4. Réponses: 1
    Dernier message: 25/10/2008, 21h48
  5. Réponses: 6
    Dernier message: 11/12/2007, 17h55

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