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

Windows Forms Discussion :

[C#] [MySQL] Mise à jour de la base de donnée


Sujet :

Windows Forms

  1. #1
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut [C#] [MySQL] Mise à jour de la base de donnée
    Salut .

    Je voudrais savoir comment utiliser les commandes UpdateCommand, InsertCommand etc etc avec un MySqlDataAdapter .

    En effet le code suivant ne donne rien dans la base de données (la ligne n'est pas ajoutée).

    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
     
    //la requete select :
    this.DataAdapterLycee = new MySql.Data.MySqlClient.MySqlDataAdapter("SELECT * FROM eleve,responsable WHERE eleve.idResp=responsable.idResp ORDER BY idEleve ASC",this.ConnectionLycee);
     
    //la commande d'instertion : 
     
    DataRow tmp = this.dataSet1.Tables["eleve"].NewRow();
     
    		   tmp["NomEleve"] = NEleve.NomEleve.Text;
    		   tmp["PrenomEleve"] = NEleve.PrenomEleve.Text;
    		   tmp["NomResp"] = NEleve.NomResp.Text;
    		   tmp["PrenomResp"] = NEleve.PrenomResp.Text;
    		   tmp["AdrResp"] = NEleve.AdresseResp.Text;
    		   tmp["cPResp"] = NEleve.cpResp.Text;
    		   tmp["VilleResp"] = NEleve.VilleResp.Text;
    		   tmp["TelDom"] = NEleve.TelDom.Text;
    		   tmp["TelTrav"] = NEleve.TelTrav.Text;
    		   tmp["MontantCaution"] = NEleve.Caution.Text;
    		   tmp["ModePaiement"] = NEleve.ModePaiement.Text;
    		   tmp["BanqueC"] = NEleve.BanqueC.Text;
    		   tmp["NumCheque"] = NEleve.NumCheque.Text;
    		   tmp["DateCaution"] = DateTime.Today.ToString("dd-MM-yyyy");
    		   if(NEleve.Adherent.Checked == true)
    		   {
    				tmp["adherent"] = "O";
    		   }
    		   else
    		   {
    				tmp["adherent"] = "N";
    		   }
     
    		   this.dataSet1.Tables["eleve"].Rows.Add(tmp);
    		   this.dataSet1.Tables["eleve"].AcceptChanges();
     
    this.DataAdapterLycee.InsertCommand = new MySql.Data.MySqlClient.MySqlCommand("INSERT INTO responsable(idResp,NomResp,PrenomResp,cPResp,AdrResp,SAdrResp,VilleResp,TelDom,TelTrav,adherent) VALUES('','?NomResp','?PrenomResp','?CPResp','?AdrResp','?SAdrResp','?VilleResp','?TelDom,'?TelTrav','?adherent')",this.ConnectionLycee);
    		   this.DataAdapterLycee.InsertCommand.Parameters.Add("NomResp",MySqlDbType.VarChar);
    		   this.DataAdapterLycee.InsertCommand.Parameters.Add("PrenomResp",MySqlDbType.VarChar);
    		   this.DataAdapterLycee.InsertCommand.Parameters.Add("CPResp",MySqlDbType.VarChar);
    		   this.DataAdapterLycee.InsertCommand.Parameters.Add("AdrResp",MySqlDbType.VarChar);
    		   this.DataAdapterLycee.InsertCommand.Parameters.Add("SAdrResp",MySqlDbType.VarChar);
    		   this.DataAdapterLycee.InsertCommand.Parameters.Add("VilleResp",MySqlDbType.VarChar);
    		   this.DataAdapterLycee.InsertCommand.Parameters.Add("TelDom",MySqlDbType.VarChar);
    		   this.DataAdapterLycee.InsertCommand.Parameters.Add("TelTrav",MySqlDbType.VarChar);
    		   this.DataAdapterLycee.InsertCommand.Parameters.Add("adherent",MySqlDbType.VarChar);
     
    		   this.DataAdapterLycee.InsertCommand.Parameters["NomResp"].SourceColumn = "NomResp";
    		   this.DataAdapterLycee.InsertCommand.Parameters["PrenomResp"].SourceColumn = "PrenomResp";
    		   this.DataAdapterLycee.InsertCommand.Parameters["CPResp"].SourceColumn = "cPResp";
    		   this.DataAdapterLycee.InsertCommand.Parameters["AdrResp"].SourceColumn = "AdrResp";
    		   this.DataAdapterLycee.InsertCommand.Parameters["SAdrResp"].SourceColumn = "SAdrResp";
    		   this.DataAdapterLycee.InsertCommand.Parameters["VilleResp"].SourceColumn = "VilleResp";
    		   this.DataAdapterLycee.InsertCommand.Parameters["TelDom"].SourceColumn = "TelDom";
    		   this.DataAdapterLycee.InsertCommand.Parameters["TelTrav"].SourceColumn = "TelTrav";
    		   this.DataAdapterLycee.InsertCommand.Parameters["adherent"].SourceColumn = "adherent";
     
    this.DataAdapterLycee.Update(this.dataSet1.Tables["eleve"]);
    Et la rien dans la base de donnée ...

    please me !!!
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Essaye de voir pour utiliser un CommandBuilder.

    Si tu passes ta requete (SELECT * FROM eleve....) au dataadapter, et que tu passe le dataadapter au commandbuilder, les requêtes UpdateCommand, InsertCommand etc sont générées automatiquement pour ton update.


    cf: http://www.developerfusion.com/show/4278/4

  3. #3
    Membre habitué Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 183
    Points
    183
    Par défaut
    J'ai pas tout compris...tu veux rajouter un élève ou un responsable..?
    Prenons un cas simple
    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
     
    string sql = "select * from eleve where 1=0";
    DsTrace ds = new DsTrace();
    OleDbDataAdapter sda = new OleDbDataAdapter(sql,this.ConnectionLycee);
    OleDbCommandBuilder custCB = new OleDbCommandBuilder(sda);
    sda.Fill(ds,"eleve");
     
    DataRow tmp = ds.Tables["eleve"].NewRow(); 
     
             tmp["NomEleve"] = NEleve.NomEleve.Text; 
             tmp["PrenomEleve"] = NEleve.PrenomEleve.Text; 
             tmp["NomResp"] = NEleve.NomResp.Text; 
             tmp["PrenomResp"] = NEleve.PrenomResp.Text; 
             tmp["AdrResp"] = NEleve.AdresseResp.Text; 
             tmp["cPResp"] = NEleve.cpResp.Text; 
             tmp["VilleResp"] = NEleve.VilleResp.Text; 
             tmp["TelDom"] = NEleve.TelDom.Text; 
             tmp["TelTrav"] = NEleve.TelTrav.Text; 
             tmp["MontantCaution"] = NEleve.Caution.Text; 
             tmp["ModePaiement"] = NEleve.ModePaiement.Text; 
             tmp["BanqueC"] = NEleve.BanqueC.Text; 
             tmp["NumCheque"] = NEleve.NumCheque.Text; 
             tmp["DateCaution"] = DateTime.Today.ToString("dd-MM-yyyy"); 
             if(NEleve.Adherent.Checked == true) 
             { 
                tmp["adherent"] = "O"; 
             } 
             else 
             { 
                tmp["adherent"] = "N"; 
             } 
     
    ds.Tables["eleve"].Rows.Add(tmp); 
    ds.Tables["eleve"].AcceptChanges(); 
     
     
    sda.InsertCommand = custCB.GetInsertCommand();
    sda.Update(ds,"eleve");
    et là ta nouvelle ligne élève doit être ajouté...(tu peux ajouter autant de lignes que tu veux à ta datatable)
    c ça que tu veux faire..?

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par Morpheus
    Essaye de voir pour utiliser un CommandBuilder.

    Si tu passes ta requete (SELECT * FROM eleve....) au dataadapter, et que tu passe le dataadapter au commandbuilder, les requêtes UpdateCommand, InsertCommand etc sont générées automatiquement pour ton update.


    cf: http://www.developerfusion.com/show/4278/4
    il est dit que les requetes impliquant plusieurs tables ne sont pas gérées par les CommandBuilders c'est pourquoi je ne les utilisent pas .
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  5. #5
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    [quote="del-dongo"]J'ai pas tout compris...tu veux rajouter un élève ou un responsable..?
    [/quote ]

    Un responsable pour le moment mais l'élève doit etre ajouté après (une fois que le responsable a été ajouté à la base.

    Citation Envoyé par del-dongo
    et là ta nouvelle ligne élève doit être ajouté...(tu peux ajouter autant de lignes que tu veux à ta datatable)
    c ça que tu veux faire..?
    à peu près ... Pour le commandBuilder voir remarque pour Morpheus.
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par dev01
    il est dit que les requetes impliquant plusieurs tables ne sont pas gérées par les CommandBuilders c'est pourquoi je ne les utilisent pas .
    T'as vu ca où dans l'article que je t'ai passé ?

  7. #7
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par Morpheus
    Citation Envoyé par dev01
    il est dit que les requetes impliquant plusieurs tables ne sont pas gérées par les CommandBuilders c'est pourquoi je ne les utilisent pas .
    T'as vu ca où dans l'article que je t'ai passé ?
    pas dans l'article que tu m'as passé mais dans un bouquin et il me semble sur la documentation du framework :
    Les vues de base de données qui sont créées en reliant deux ou plusieurs tables ne sont pas considérées comme une table de base de données unique. Dans cette instance, vous ne pourrez pas utiliser CommandBuilder pour générer automatiquement les commandes ; vous devrez les spécifier de manière explicite.
    le lien sur msdn
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Tu as été voir le lien dont ils parlent après: http://msdn.microsoft.com/library/fre/default.asp?url=/library/fre/cpguide/html/cpconupdatingdatabasewithdataadapterdataset.asp :

  9. #9
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    oui mais je vois pas très bien l'interet.

    Perso j'utilise MySql et je voudrais savoir si qq à déjà mis à jour une base de donnée à partir d'un DataSet en utilisant les drivers MySql .
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  10. #10
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    je met résolu mais ça ne l'est pas completement .

    j'ai un boucle avec la commande ... rien de bien terrible ...
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  11. #11
    AkH
    AkH est déconnecté
    Membre du Club
    Homme Profil pro
    Perso
    Inscrit en
    Juillet 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Perso

    Informations forums :
    Inscription : Juillet 2005
    Messages : 58
    Points : 52
    Points
    52
    Par défaut Même problème mais sous MySQL 5.1
    J'ai exactement le même soucis mais sous MySQL avec le drivers MySql.Data v5.1

    voici mon code écrit en essayant de reprendre celui plus haut qui à servit de réponse:

    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
     
    Connection.Open();
     
    //
    // Recherche de l'ID de la salle à reserver pour association avec la table 'reserv'
    //
    string MySQLCmd = "SELECT `id` FROM `salle` WHERE nom = '" + formulaire.getSalle() + "'";
    MyAdapter.SelectCommand = new MySqlCommand(MySQLCmd, Connection);
    MySqlCommandBuilder CmdInsert = new MySqlCommandBuilder(MyAdapter);
    MyAdapter.Fill(ds);
    string id = ds.Tables[0].Rows[0]["id"].ToString();
     
    //
    // Préparation de la ligne à inserer
    //
    ds = new DataSet();
    MySQLCmd = "SELECT * FROM `reserv`";
    MyAdapter.SelectCommand = new MySqlCommand(MySQLCmd, Connection);
    MyAdapter.Fill(ds);
    DataRow tmp = ds.Tables[0].NewRow();
     
    //
    // Remplissage de la ligne à insérer
    //
    tmp["salle"] = id;
    tmp["materiels"] = '3';
    tmp["objet"] = formulaire.getObjet();
    tmp["heure_deb"] = formulaire.getHeureDebut();
    tmp["heure_fin"] =  formulaire.getHeureFin();
    tmp["jour"] = formulaire.getDate();
    tmp["commentaires"] = formulaire.getCommentaires();
    tmp["president"] = formulaire.getPresident();
    tmp["adresse_mail"] = formulaire.getAdresseMail();
    tmp["statut"] = "En cours";
     
    //
    // Insertion dans la BDD de la réservation
    //
    ds.Tables[0].Rows.Add(tmp);
    ds.Tables[0].AcceptChanges();
     
    MyAdapter.InsertCommand = CmdInsert.GetInsertCommand();
    MyAdapter.Update(ds,"Table");
     
    Connection.Close();
    Le dataset "ds" contient bien la seconde ligne créée et rempli mais pas d'ajout de ligne dans la BDD

    Faut-il utiliser une autre méthode pour MySQL 5.1 ?

  12. #12
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Citation Envoyé par AkH
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    ds.Tables[0].Rows.Add(tmp);
    ds.Tables[0].AcceptChanges();
    
    MyAdapter.InsertCommand = CmdInsert.GetInsertCommand();
    MyAdapter.Update(ds,"Table");
    
    Connection.Close();
    Il ne faut pas faire de AcceptChange avant un Update.
    MSDN
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  13. #13
    AkH
    AkH est déconnecté
    Membre du Club
    Homme Profil pro
    Perso
    Inscrit en
    Juillet 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Perso

    Informations forums :
    Inscription : Juillet 2005
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    oki et merci, je vais le supprimer.

    J'ai vu aussi que comme un gros boulet j'ai oublié toutes les ' ' sur toutes mes chaines de caractères

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/09/2011, 09h03
  2. Réponses: 2
    Dernier message: 30/03/2007, 21h11
  3. [MySQL] Problème de mise à jour de la base de données
    Par Osiris22 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 17/01/2006, 16h08
  4. probleme de virgule dans la mise à jour d'une base de donnée
    Par KAF dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 24/12/2005, 02h18
  5. mise à jour d'une base de données
    Par flo83 dans le forum ASP
    Réponses: 6
    Dernier message: 12/06/2005, 20h27

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