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 :

Problème d'insertion de lignes dans une table MySql [Fait]


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 254
    Par défaut Problème d'insertion de lignes dans une table MySql
    Bonjour,

    J'ai une base de donnée MySql qui contient une table: table1, contenant trois champs: idtab1(int autoincement), attiribut1(varchar), attribut2(varchar).
    et une forme, contenant, textbox1, pour le idtab, textbox2, pour attribut1, et textbox3 pour attribut3.

    Je veux insérer une ligne à travers ces textbox dans ma table, mais, il y a un problème, que je ne sai pas comment résoudre, svp, aidez moi à le résoudre,
    l'erreur, est la suivante: la référence d'objet n'est pas définie à une instance d'un objet.

    et 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
    36
    try
                {
                    cnx.ConnectionString = strConn;
     
                    cnx.Open();
                    MessageBox.Show("Connection réussie");
                    string MySQLCmd1 = "SELECT * FROM table1";
                    string MySQLCmd2 = "INSERT INTO table1(idtab1,attribut1,attribut2) VALUES('','?attribut1','?attribut2')";
     
                    MyAdapter.SelectCommand = new MySqlCommand(MySQLCmd1, cnx);
     
                    DataRow tmp = this.ds.Tables["table1"].NewRow();
     
                    tmp["idtab1"] = int.Parse(textBox1.Text);
                    tmp["attribut1"] = textBox2.Text;
                    tmp["attribut3"] = textBox3.Text;
     
                    this.ds.Tables["table1"].Rows.Add(tmp);
                    this.ds.Tables["table1"].AcceptChanges();
     
     
                    MyAdapter.InsertCommand = new MySqlCommand(MySQLCmd2, cnx);
                    this.MyAdapter.InsertCommand.Parameters.Add("attribut1", MySqlDbType.VarChar);
                    this.MyAdapter.InsertCommand.Parameters.Add("attribut2", MySqlDbType.VarChar);
     
                    this.MyAdapter.InsertCommand.Parameters["attribut1"].SourceColumn = "attribut1";
                    this.MyAdapter.InsertCommand.Parameters["attribut2"].SourceColumn = "attribut2";
     
                    this.MyAdapter.Update(this.ds.Tables["table1"]);
                    cnx.Close();
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Problème de connection " + ex.Message);
                }
    Merci infiniment, je commence à en avoir honte , je pose trop de questions sur ce forum. parce que je suis entrain d'apprendre.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Cette erreur signifie qu'une variable que tu manipules est null (non initialisé). Sur quelle ligne l'erreur se produit ?

    D'autre part, il y a un problème dans ton code : tu appelles AcceptChanges avant d'appeler MyAdapter.Update, donc Update ne fait rien parce que les changements dans le DataSet sont déjà acceptés (et ne sont donc plus considérés comme des changements). Pas la peine de faire AcceptChanges explicitement, ce sera fait automatiquement par Update si la propriété AcceptChangesDuringUpdate vaut true (c'est sa valeur par défaut).

    Sinon, plutôt que de créer manuellement la commande INSERT, je te conseille d'utiliser un CommandBuilder :
    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
    try
                {
                    cnx.ConnectionString = strConn;
     
                    cnx.Open();
                    MessageBox.Show("Connection réussie");
                    string MySQLCmd1 = "SELECT * FROM table1";
                    MyAdapter.SelectCommand = new MySqlCommand(MySQLCmd1, cnx);
                    MySqlCommandBuilder builder = new MySqlCommandBuilder(MyAdapter);
     
                    DataRow tmp = this.ds.Tables["table1"].NewRow();
     
                    tmp["idtab1"] = int.Parse(textBox1.Text);
                    tmp["attribut1"] = textBox2.Text;
                    tmp["attribut3"] = textBox3.Text;
     
                    this.ds.Tables["table1"].Rows.Add(tmp);
     
                    this.MyAdapter.Update(this.ds.Tables["table1"]);
                    cnx.Close();
     
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Problème de connection " + ex.Message);
                }

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 254
    Par défaut
    Salut,

    C'est toujours la même chose, l'erreur est mentionné lors de l'exécution de cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DataRow tmp = this.ds.Tables["table1"].NewRow();

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par developppez Voir le message
    C'est toujours la même chose,
    Je sais... j'ai proposé une amélioration, mais ça ne corrige pas le problème

    Citation Envoyé par developppez Voir le message
    l'erreur est mentionné lors de l'exécution de cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DataRow tmp = this.ds.Tables["table1"].NewRow();
    2 possibilités :
    - soit tu n'as pas initialisé ds, qui vaut alors null
    - soit la table "table1" n'existe pas dans le DataSet : vérifie bien le nom, les majuscules/minuscules sont importantes. Et tu devrais donner à tes tables des noms plus explicites...

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 254
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je sais... j'ai proposé une amélioration, mais ça ne corrige pas le problème



    2 possibilités :
    - soit tu n'as pas initialisé ds, qui vaut alors null
    - soit la table "table1" n'existe pas dans le DataSet : vérifie bien le nom, les majuscules/minuscules sont importantes. Et tu devrais donner à tes tables des noms plus explicites...

    Comment savoir si mon dataset est initialisé ou pas, c'est a dire, sur quel propriété doit je vérifier (binding peut etre ).

    et coment vérifier si "table1" existe dans mon dataset ou pas?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par developppez Voir le message
    Comment savoir si mon dataset est initialisé ou pas, c'est a dire, sur quel propriété doit je vérifier (binding peut etre ).
    Ben regarde s'il est null

    Citation Envoyé par developppez Voir le message
    et coment vérifier si "table1" existe dans mon dataset ou pas?
    [/QUOTE]
    il sort d'où ton DataSet ? tu l'as créé avec le designer ? dans ce cas il suffit de regarder dans le designer... Sinon regarde dans la collection ds.Tables

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 254
    Par défaut
    j'ai renommé la table mysql en "matable", j'ai réinitialisé ma dataset ds, avec la propriété, tables/ ajouter, tablename= matable: je ne sais pas si comme ça on initialise un dataset ou est ce que je me trompe.
    lorsque j'exécute: je met 11 par exemple dans le textbox de idtab1 et rempli les autres textbox par des chaines de caractères. il m'affiche l'erreur suivante:

    la colonne idtab1 n'appartient pas à la table matable, (sachant, que le champs, idtab1, est de type int auto_increment, not null et primary key)

    si je met rien, l'erreur affichée est: la format de la chaine est incorrecte.

    c'est quoi alors le problème à votre avis?

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

Discussions similaires

  1. problème d'insertion des objets dans une table(sql)
    Par satinona dans le forum Hibernate
    Réponses: 3
    Dernier message: 10/05/2013, 16h15
  2. Réponses: 2
    Dernier message: 22/06/2010, 15h24
  3. [Oracle] problème d'insertion de données dans une table sous oracle
    Par Zombiman dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/05/2009, 14h58
  4. probléme d'insertion des variables dans une table
    Par moooona dans le forum Installation
    Réponses: 2
    Dernier message: 30/03/2008, 14h08
  5. echec d'insertion de ligne dans une table
    Par foblar dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/07/2006, 10h13

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