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#

  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 : 40

    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 : 40

    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 : 40

    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 éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Ok merci, je vais tester le AcceptChanges apres l'update (Je l'avais deja teste avent l'update mais du coup aucune des modifications n'avaient ete effectuees...).

    Merci aussi pour la methode de recuperation de la commande SQL.
    Je teste et je reviens

  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 : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    En effet le AcceptChanges resoud les plantages d'update mais du coup la moitie des fonctionnalites implementees dans la DataGrid ne fonctionnent plus par exemple :

    Possibilite de selectionner des colonnes et de les dupliquer : Apres les modifications, une seule colonne est dupliquee si j'en selectionne plusieurs (selection avec des checkbox).

    Il y a aussi une perte de toutes les lignes selectionnee et des cellules se mettent en surbrillance toutes seules...

    En fait ca regle le probleme initial mais ca glace les options codees sur la grille...

  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 : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Visual .NET ne me propose pas pARAMTableAdapter.Update.UpdateCommand.CommandText

    Faut il inclure une librairie speciale ou ajouter quelque chose pour y acceder ?

  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
    Visual .NET ne me propose pas pARAMTableAdapter.Update.UpdateCommand.CommandText
    Il faut le caster sur le type d'adapter utilisé, par exemple :
    ((OleDbDataAdapter)pARAMTableAdapter).Update.UpdateCommand.CommandText

  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 : 40

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Voici l'erreur si j'essaye de caster sur ce type :

    Error 2 Cannot convert type 'SCM.ParamDSTableAdapters.PARAMTableAdapter' to 'System.Data.OleDb.OleDbDataAdapter' C:\Documents and Settings\x0073450\Desktop\1.1.0.38 20070426\SCMApp\frmSCMData.cs 1117 38 SCMAppV2

  12. #12
    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
    Ce n'est donc pas un OleDbAdapter, mais la plupart des adapters (hors XML) sont batis sur le meme modéle et utilisent des commandes SQL pour accéder aux SGBD.

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Donc mon adapter serait compose en xml ?

  14. #14
    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'aimerais juste savoir quelque chose pour mieux comprendre ton problème.

    Les données que tu manipules se trouvent dans un DataSet. Est-ce que ton DataSet est typé ou non? Car il y a une différence pour les adapteurs, si je me souviens bien.

    Bonne chance,
    Idril Elendil

  15. #15
    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
    Quel est le SGBD utilisé (Access, MySQL, Oracle, SQL server, ...)?

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Pour le SGBD c'est Oracle. Le logiciel faisait la liaison en ODBC mais nous l'avons change en OLE DB avec le provider Oracle.

    Pour le TableAdapter, voici la declaration :

    private SCM.ParamDSTableAdapters.PARAMTableAdapter pARAMTableAdapter;

    puis :


    public partial class PARAMTableAdapter : System.ComponentModel.Component {

    private System.Data.OleDb.OleDbDataAdapter _adapter;

    private System.Data.OleDb.OleDbConnection _connection;

    private System.Data.OleDb.OleDbCommand[] _commandCollection;

    private bool _clearBeforeFill;

    [System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public PARAMTableAdapter() {
    this.ClearBeforeFill = true;
    }

  17. #17
    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,

    Il faut donc regarder en debug avant l'execcution de l'instruction _adapter.Update(MyDataSet) dans le contenu de la variable :_adapter.Update.UpdateCommand.CommandText la clause SQL WHERE.

    Autre question, comment sont fait les updates : est-ce en modifiant une Table du DataSet, puis en faisant _adapter.Update() et ensuite le AcceptChanges() sur la table ?

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Ben justement, c'est le but de cette discussion de savoir comment fonctionne les updates. Dans la MSDN il est marqué qu'un TableAdapter.update choisit automatiquement les commandes a executer (update, delete et add) selon si on a ajouté, supprimé ou modifié des valeurs dans le TableAdapter. Il semblerait qu'un AcceptChanges() après l'update réduit les erreurs (Après tests les erreurs se font très rares mais sont toujours là).
    Si quelqu'un veut partager son expèrience sur les DataAdapter, TableAdapter et leurs methodes updates, il est le bienvenu...

  19. #19
    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 tu fais :
    1) un Update() après chaque ajout, modif, suppression.
    2) une édition globale puis tu valides et reporte par l'update() l'ensemble des modif.

    Dans le cas 2), il peut y avoir des erreurs de concurency si toutes les contraintes d'unicité de clé du SGBD n'ont pas été reportés dans le DataSet.

    Dans le cas 1), en principe ce type de problème "0 modif sur 1 demandée" ne devrait pas se produire si aucun utilisateur n'a modifié la base entre temps.

  20. #20
    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();
    
    }
    }
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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, 11h09
  2. [requete SQL] Probleme requete UPDATE
    Par Shiryu44 dans le forum JDBC
    Réponses: 12
    Dernier message: 10/03/2005, 12h41
  3. probleme requete update
    Par Amandine62 dans le forum ASP
    Réponses: 12
    Dernier message: 27/01/2005, 12h15
  4. probleme d'update
    Par adun dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/01/2005, 12h27
  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, 02h56

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