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 :

Update dataset Datagridview


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 117
    Par défaut Update dataset Datagridview
    slt voila le code executé :

    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
     
                                case "COMPORTER":
                                    oAdapt.UpdateCommand.CommandText = "UPDATE COMPORTER SET RUB_ID=@RUB_ID,SPECIF_ID=@SPECIF_ID,COMPORT_COEF=@COMPORT_COEF WHERE (RUB_ID=@RUB_ID AND SPECIF_ID=@SPECIF_ID AND COMPORT_COEF=@COMPORT_COEF)";
     
     
                                    //preparation du domaine ID
                                    paraID = oAdapt.UpdateCommand.CreateParameter();
                                    paraID.SourceColumn = "RUB_ID";
                                    paraID.ParameterName = "@RUB_ID";
     
                                    oAdapt.UpdateCommand.Parameters.Add(paraID);
     
     
                                    para = oAdapt.UpdateCommand.CreateParameter();
                                    para.SourceColumn = "SPECIF_ID";
                                    para.ParameterName = "@SPECIF_ID";
     
                                    oAdapt.UpdateCommand.Parameters.Add(para);
     
                                    para = oAdapt.UpdateCommand.CreateParameter(); 
                                    para.SourceColumn = "COMPORT_COEF";
                                    para.ParameterName = "@COMPORT_COEF";
     
                                    oAdapt.UpdateCommand.Parameters.Add(para);
     
     
                                    //preparation du domaine ID
                                    paraID = oAdapt.UpdateCommand.CreateParameter();
                                    paraID.SourceColumn = "RUB_ID";
                                    paraID.ParameterName = "@RUB_ID_ORIGIN";
                                    paraID.SourceVersion = DataRowVersion.Proposed;
                                    oAdapt.UpdateCommand.Parameters.Add(paraID);
     
     
                                    para = oAdapt.UpdateCommand.CreateParameter();
                                    para.SourceColumn = "SPECIF_ID";
                                    para.ParameterName = "@SPECIF_ID_ORIGIN";
                                    paraID.SourceVersion = DataRowVersion.Proposed;
                                    oAdapt.UpdateCommand.Parameters.Add(para);
    Mais j'obtient à chaque fois une erreur de type :
    Violation de l'accès concurrentiel : UpdateCommand a affecté 0 enregistrement

    A priori l'erreur vient de ma requette car en mettant les données en dur pour SPECIF_ID_ORIGIN et RUB_ID_ORIGIN ca fonctionne

    Une idée ??

    Merci d'avance !!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Citation Envoyé par flatron
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    paraID.SourceVersion = DataRowVersion.Proposed;
    ...
    La version "proposée" sera la version "actuelle", celle qui a été modifiée dans ton DataSet depuis que tu as importé les données...
    Donc là aucun enregistrement dans ta base ne correspond à la clause WHERE, du coup aucune ligne n'est modifiée, or ton DataSet s'attend à ce qu'il y en ait au moins une.

    Il faut utiliser la version "originale" des valeurs de ton DataRow pour la clause WHERE.
    Donc pareil (sauf si autres erreurs... là c'est celle-ci que j'ai vue), mais avec DataRowVersion.Original.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 117
    Par défaut
    En fait ma derniere idée était : DataRowVersion.Proposed l'idée de la dernierechance , mais à la base c'etait bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataRowVersion.Original
    Maisl'erreur est la meme !
    Merci

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Ahaaa...

    Je viens de voir autre chose :
    dans ta requête tu utilises deux fois le même nom pour les paramètres, mais quand tu définis tes paramètres tu leur donne des noms différents ("@PRAM" et "@PARAM_ORIGIN"...)
    => c'est fait exprès ou c'est un autre reste des tests de la dernière chance ?

    (Ceci dit je n'utilise pas le même type de base donc d'habitude je mets toujours "?" sans me poser de questions dans mes requêtes, alors je ne sais pas ce qu'il faut mettre normalement.)

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 117
    Par défaut
    Merci pour tes réponses.

    J'ai supprimé les RUB_Id_Origin, et SPECIF_ID_Origin
    Mais le probleme reste le meme, prob sur la requete !!
    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
     
                                    oAdapt.UpdateCommand.CommandText = "UPDATE COMPORTER SET RUB_ID=@RUB_ID,SPECIF_ID=@SPECIF_ID,COMPORT_COEF=@COMPORT_COEF WHERE (RUB_ID=@RUB_ID AND SPECIF_ID=@SPECIF_ID)";
     
     
                                    //preparation du domaine ID
                                    paraID = oAdapt.UpdateCommand.CreateParameter();
                                    paraID.SourceColumn = "RUB_ID";
                                    paraID.ParameterName = "@RUB_ID";
     
                                    oAdapt.UpdateCommand.Parameters.Add(paraID);
     
     
                                    para = oAdapt.UpdateCommand.CreateParameter();
                                    para.SourceColumn = "SPECIF_ID";
                                    para.ParameterName = "@SPECIF_ID";
     
                                    oAdapt.UpdateCommand.Parameters.Add(para);
     
                                    para = oAdapt.UpdateCommand.CreateParameter(); 
                                    para.SourceColumn = "COMPORT_COEF";
                                    para.ParameterName = "@COMPORT_COEF";
     
                                    oAdapt.UpdateCommand.Parameters.Add(para);

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Euh...
    là tu as supprimé les paramètres qui servaient à récupérer les données originales, alors ça ne risque pas de marcher

    Je pensais plutôt à renommer en "@PARAM_ORIGIN" les paramètres de ta clause WHERE.



    Sinon, ce que tu peux faire pour comprendre le problème :
    - tester ta requête avec les paramètres "en dur"
    - tester ta requête avec des paramètres, mais leur donnant une valeur "en dur" avant l'exécution de la commande ( monParam1.Value = ...; monParam2.Value = ...; maCommand.ExecuteNonQuery(); ) => s'il y a un problème dans les noms des paramètres tu devrais le voir là
    - tester à nouveau avec ton DataSet en vérifiant bien les valeurs des DataRow, courantes et originales, avant d'effectuer l'update => peut-être y a-t-il un problème dans ton traitement de ton DataSet ? un AcceptChanges() intempestif ?

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

Discussions similaires

  1. [VB.NET] Update DataSet/DatagridView
    Par tssi555 dans le forum VB.NET
    Réponses: 1
    Dernier message: 25/08/2009, 10h50
  2. Forcer update Dataset
    Par timotep dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/08/2007, 17h13
  3. [C#] update dataset
    Par drayif dans le forum C#
    Réponses: 2
    Dernier message: 16/07/2007, 14h18
  4. VB 2005 + Problème Update Dataset
    Par ghostlxl dans le forum VB.NET
    Réponses: 4
    Dernier message: 13/03/2007, 14h12
  5. [VB.Net] Comment updater Dataset avec un OledbCommandBuilder ?
    Par dyree dans le forum Accès aux données
    Réponses: 3
    Dernier message: 04/07/2006, 13h50

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