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

C# Discussion :

Probleme de mise a jour de la base de donnée via un DataAdapter


Sujet :

C#

  1. #1
    Membre éclairé

    Inscrit en
    Avril 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 55
    Par défaut Probleme de mise a jour de la base de donnée via un DataAdapter
    Bonjour,
    je développe une application en c#, et je bloque actuellement la mise a jour d'une table de la base de donnée avec un datagridView + dataAdapter, lors de la mise a jour, une Exception en lancée avec le message suivant :
    "FillinValues failed"

    Voicis mon code :

    la requête qui remplis la source de donnée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return this.executeMultipleResultQuery("SELECT type_document_designation as \"Désignation\", type_document_nom as \"Nom type\", type_document_donnee as \"Donnée type\" FROM type_document");
    la méthode qui met a jour la base de donné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
     
    public void setDocType(DataTable newData)
            {
                this.adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
                this.adapter.InsertCommand = new OleDbCommand("INSERT INTO type_document(type_document_designation, type_document_nom, type_document_donnee) VALUES (?, ?, ?)", this.conn);
                this.adapter.UpdateCommand = new OleDbCommand("UPDATE type_document SET type_document_designation = ?, type_document_nom = ?, type_document_donnee = ? WHERE type_document_designation = ?", this.conn);
                this.adapter.DeleteCommand = new OleDbCommand("DELETE FROM type_document WHERE type_document_designation = ?", this.conn);
                this.adapter.InsertCommand.Parameters.Add("@type_document_designation", OleDbType.VarChar, 5, "Désignation");
                this.adapter.InsertCommand.Parameters.Add("@type_document_nom", OleDbType.VarChar, 20, "Nom type");
                this.adapter.InsertCommand.Parameters.Add("@type_document_donnee", OleDbType.VarChar, 20, "Donnée type");
                this.adapter.UpdateCommand.Parameters.Add("@type_document_designation", OleDbType.VarChar, 5, "Désignation");
                this.adapter.UpdateCommand.Parameters.Add("@type_document_nom", OleDbType.VarChar, 20, "Nom type");
                this.adapter.UpdateCommand.Parameters.Add("@type_document_donnee", OleDbType.VarChar, 20, "Donnée type");
                //this.adapter.UpdateCommand.Parameters.Add("@oldtype_document_designation", OleDbType.VarChar, 5, "Désignation").SourceVersion = DataRowVersion.Original;
                this.adapter.DeleteCommand.Parameters.Add("@type_document_designation", OleDbType.VarChar, 5, "Désignation").SourceVersion = DataRowVersion.Original;
                this.adapter.Update(newData);
            }
    c'est la dernière ligne qui pose problème, Merci d'avance.

  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
    Oulà, tu te fais du mal là...

    Crée le DataAdapter en définissant seulement la SelectCommand, et utilise un CommandBuilder pour générer les autres commandes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.adapter.SelectCommand = new OleDbCommand("SELECT ... FROM ...", this.conn);
    var builder = new OleDbCommandBuilder(this.adapter);
    this.adapter.Update(newData);
    A moins de vouloir faire quelque chose de très spécifique et de savoir exactement ce que tu fais, il n'y a quasiment jamais besoin de définir soi-même les commandes de mise à jour.

  3. #3
    Membre éclairé

    Inscrit en
    Avril 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 55
    Par défaut Test avec OleDbCommandBuilder
    Merci de ta réponse,

    visiblement c'est le provider qui déconne, en effet lors de l’exécution, j'aie l’exception suivante :
    Échec de'PostgreSQL OLE DB Provider' sans aucun message d'erreur disponible
    et en essayant d'afficher une requête générée j'aie le même message.

  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
    En même temps OleDB c'est un peu foireux, tu ferais mieux d'utiliser le provider ADO.NET natif pour PostgreSQL...
    http://pgfoundry.org/projects/npgsql/

  5. #5
    Membre éclairé

    Inscrit en
    Avril 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 55
    Par défaut ça marche !!!
    Ben ça marche nickel avec Npgsql Merci pour tes réponses
    Je met le code au cas ou d'autres aurais ce problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void setDocType(DataTable newData)
            {
                this.adapter.SelectCommand = new NpgsqlCommand("SELECT type_document_designation as \"Désignation\", type_document_nom as \"Nom type\", type_document_donnee as \"Donnée type\" FROM type_document", this.connection);
                NpgsqlCommandBuilder builder = new NpgsqlCommandBuilder(this.adapter);
                this.adapter.UpdateCommand = builder.GetUpdateCommand();
                this.adapter.InsertCommand = builder.GetInsertCommand();
                this.adapter.DeleteCommand = builder.GetDeleteCommand();
                this.adapter.Update(newData);
            }

  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 ahoff Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                this.adapter.UpdateCommand = builder.GetUpdateCommand();
                this.adapter.InsertCommand = builder.GetInsertCommand();
                this.adapter.DeleteCommand = builder.GetDeleteCommand();
    En principe tu n'as pas besoin de ces 3 lignes, c'est automatique. Le CommandBuilder s'abonne à l'évènement RowUpdating du DataAdapter et crée la commande (Update, Insert ou Delete) si elle n'est pas déjà créée

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

Discussions similaires

  1. [MySQL] mysql, probleme de mise a jour d'une base de donnée
    Par lol88 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/01/2010, 17h52
  2. [MySQL] probleme de mise a jour de la base de donnée
    Par Palsajicoco dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/06/2009, 18h49
  3. Réponses: 3
    Dernier message: 27/01/2009, 20h56
  4. Réponses: 7
    Dernier message: 13/08/2007, 13h15
  5. Suivre les mises a jour d'une base de données avec Delphi 7?
    Par ncazanav dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/12/2006, 20h22

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