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 d'update d'un TableAdapter


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut Probleme d'update d'un TableAdapter
    Voila mon probleme :

    Je gere des donnees avec un DataGridView et la creation et modification se passent bien, mais lorsque je cree, modifie puis supprime juste apres, la commande update de mon TableAdapter plante.(Je fais pourtant un update apres chaque operation sur la datagrid). il plante un peu au hasard une fois sur 4, meme parfois lorsque je valide le contenu d'une cellule.


    Voici le code associe qui est execute apres creation d'une ligne, validation d'une cellule et suppression d'une ligne:

    private void SaveItem()
    {
    this.Validate();
    if (this.paramDS.HasChanges())
    {
    if (!this.paramDS.PARAM.HasErrors)
    {
    this.pARAMTableAdapter.Update(this.paramDS.PARAM);
    }
    }
    }


    Voici le message d'erreur :

    Concurrency violation: the UpdateCommand affected 0 of the expected 1 records.

    Si quelqu'un a un conseil...

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    0 of 1 affected à cause du "concurrency violation" indique que la commande update n'a pas abouti parce que l'instruction SQL de modification du dataadapter n'a pas trouvé l'enregistrement à modifier défini par la clause WHERE de l'instruction SQL.

    Pour une appli qui "tourne", on peut avoir ce genre d'erreur, lorsqu'un un autre utilisateur a modifié simultanément la base de donnée (d'ou le terme "concurrency").

  3. #3
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Si j'ai bien compris, le programme recupere une instruction d'Update non valide car les donnees retournees ne sont pas correctes.
    J'ai le meme probleme avec la commande DeleteCommand

    Comment puis-je voir les valeurs des commandes d'Update effectuees afin de savoir d'ou viens le probleme ?

  4. #4
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Je precise que ce programme ne fonctionne qu'en test et je ne suis que le seul utilisateur.
    De plus, les commandes fonctionnent lorsque je ne fais qu'ajouter des lignes ou que modifier ou que supprimer.
    L'erreur arrive quand je modifie puis ajoute, puis re-modifie puis supprime...

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Comment puis-je voir les valeurs des commandes d'Update effectuees afin de savoir d'ou viens le probleme ?
    Avant l'execcution de l'instruction MyAdapter.Update(MyDataSet) vérifier dans le contenu de la variable MyAdapter.Update.UpdateCommand.CommandText la clause SQL WHERE.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 40
    Par défaut
    Bonjour,
    j'ai déjà eu un problème similaire il y a un bon bout de temps. Si j'ai bien compris ce que tu essaies de faire c'est: des ajouts, modifications et suppressions sur des données dans un DataGridView et lors du Update du TableAdapter de ta table... ça plante.

    Si je me souviens bien, la cause du problème vient du fait que les différents enregistrements se trouvant dans la table de ton DataSet ont un état (Added, Modified, Deleted, Unchanged) et que lorsque tu fais ton Update sur ta table avec ton adapteur, le contenu est mis à jour dans ta base de données, mais pas dans ton DataSet. Si je ne me trompe pas, il faudrait que tu fasses un .AcceptChanges() sur la table de ton DataSet après avoir fait ton update.

    J'espère que j'ai été assez clair et que ce que j'ai écrit est valide, sinon excusez-moi car cela fait un bon moment que je n'ai pas programmé en C#.
    Bonne chance,
    Idril Elendil

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 121
    Par défaut
    Salut
    lis cela
    http://romagny13.over-blog.com/article-5644968.html

    en fait pour faire simple essaie :
    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
    private void SaveItem()
    {
    this.Validate();
    if (this.paramDS.HasChanges())
    {
    if (!this.paramDS.PARAM.HasErrors)
    {
    this.pARAMTableAdapter.Update(this.paramDS.PARAM);
    
    this.paramDS.AcceptChanges();
    
    }
    }
    }

  8. #8
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Super article ! Il faut que je fasse des essais et aue je recherche tous les updates de mon TableAdapter. Je vous tiens au courant.

  9. #9
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Apres chaue update, je fais un AcceptChanges() et comme avant, les erreurs sont beaucoup moins nombreuses qu'avant mais existent toujours. Par exemple je copie 3500 lignes dans ma datagrid, je sauvegarde tout ca (Update + AcceptChanges() ok) et lorsque je veux toute les supprimer, il en supprime peut etre 2000 mais plante...
    Pourtant apres chaue boucle de copy, add, modify et delete, je lance ma methode SaveItem() :

    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
            private void SaveItem()
            {
                // got focus on auto save checkbox just before saving just to validate the cell
                chkAutoSave.Focus();
                this.Validate();
     
                this.pARAMBindingSource.EndEdit();
                if (this.paramDS.HasChanges())
                {
                    if (!this.paramDS.PARAM.HasErrors)
                    {
                        frmAppSplash frm = UIUtility.StartFlash("Saving changes.....", false);
                        sel = UIUtility.GetSelected(dgvParams);
                        UIUtility.UpdateModified(cLimitSetID, userid);
                        this.pARAMTableAdapter.Update(this.paramDS.PARAM);
                        this.paramDS.AcceptChanges();
                        dgvParams.ClearSelection();
                        SetSelected(sel);
                        UIUtility.StopFlash(frm);
                    }
                    else
                    {
                        MessageBox.Show("Warning : Items not saved", "Saving Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
    Du coup je ne voit pas pourquoi le progamme plante lorsque je teste sur des gros volumes (peut etre que le TableAdapter n'a pas le temps de se mettre a jour...).

    Si quelqu'un a une piste...

  10. #10
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Est-ce que la clause WHERE de la fonction Delete() du TableAdapter opère bien sur toutes les valeurs des champs?

    D'où vient la DeleteCommand de l'Adapter ? Est-ce toi qui l' a écrite.

  11. #11
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    La delete command a ete generee a travers un utilitaire (en xsd) avec les options generate update and delete command.
    En fait le probleme est cerne :

    Je lance le programme
    Je selectionne toutes les lignes de mq grid et je les duplique (fonction duplicate que j'ai codee qui permet de selectionner des lignes de ma grid et de les dupliquer)
    Un auto save est realise (avec la methode que j'ai postee un peu plus haut)
    Je selectionne toutes les lignes de ma grid et je delete.... PLANTAGE --> The DeleteCommand affected 0 of the 1 expected parameter.

    Voila le probleme.

    Maintenant si apres le duplicate je quitte et relance le programme, je peux supprimer toutes les lignes de la grid sans aucun probleme. Je pense qu'il faut faire une sorte de refresh de mon table adapter pour qu'il soit dans le meme etat que lorsque je lance l'application et qu'il charge les donnees.(pour un soucis de performances je ne peux pas le vider et le re-remplir a chaque fois).

    Pourtant je fais bien un AcceptChanges() apres l'Update() dans ma methode SaveItem()...
    Voila ou je suis bloque depuis presque 2 semaines

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

Discussions similaires

  1. [TableAdapter]Problemes Requete Update
    Par lolymeupy dans le forum Accès aux données
    Réponses: 2
    Dernier message: 18/07/2007, 10h09
  2. [requete SQL] Probleme requete UPDATE
    Par Shiryu44 dans le forum JDBC
    Réponses: 12
    Dernier message: 10/03/2005, 11h41
  3. probleme requete update
    Par Amandine62 dans le forum ASP
    Réponses: 12
    Dernier message: 27/01/2005, 11h15
  4. probleme d'update
    Par adun dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/01/2005, 11h27
  5. Probleme S/ UPDATE : ADOQUERY base = .DBF , D7
    Par bzh56 dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/02/2004, 01h56

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