Mettre à jour la base de données à partir d'une DataTable [.NET 2.0] - C#/.NET managed - Programmation
Marsh Posté le 10-02-2007 à 17:30:59
Je crois que tu ne dois pas utiliser la méthode AcceptChanges si tu veux utiliser la méthode Update, car elle réinitialise à UnChanged la propriété DataRowState. Or Update utilise cette propriété pour savoir quelles lignes doivent être modifiées !
AcceptChanges n'est utile que si tu n'as pas l'intention de mettre à jour la base à partir du groupe de données, ce que tu sembles pourtant vouloir faire
A vérifier dans la MSDN
edit: ça fonctionne comme ça en 1.1, il n'y a pas de raison que cela soit différent en 2.0
Marsh Posté le 10-02-2007 à 17:54:36
Oui effectivement, AcceptChanges () doit être placé après avoir fait l'update en base, sinon ça sert à rien
Merci bien à toi
Marsh Posté le 10-02-2007 à 19:54:30
Euh un ptit problème... j'ai trouvé qq trucs sur Internet mais ça ne veut pas marcher sur mon ordi
En fait, je modifie ma DataTable et utilisant LoadDataRow(). Ensuite, j'update ma base de donnée avec mon SqlDataAdapter. Et je m'attends à avoir une ligne updatée. Seulement, à chaque fois, il ajoute une ligne
Voici mon code simplifié :
Code :
|
Pourquoi ce code insert une ligne en base au lieu d'updater celle où la primary key = 1 ?
Merci bien
Marsh Posté le 10-02-2007 à 20:52:59
Si le LoadDataRow ne trouve pas la ligne il en créé une.
Il faut sans doute que tu commences par charger la ligne "1" "julien" puis modifier "julien" en "robert" et updater, non ?
edit : et il faut peut-être faire le load à true si tu veux effectuer des modifs.
Enfin c'est ce que je comprends en lisant la MSDN, je n'ai jamais utilisé ces méthodes
Marsh Posté le 10-02-2007 à 21:44:04
Bin ma ligne "1" "julien" se trouve bien dans mon dataset pourtant...
Et puis j'ai aussi essayé de changer le 2ème argument de LoadDataRow(), mais quand il vaut "True", ça ne fait aucun changement en base
En tout cas, merci bcp pour ton aide
Et si qqn a une idée
Marsh Posté le 11-02-2007 à 08:10:12
je répète : si le LoadDataRow ne trouve pas la ligne il en créé une.
Ton problème vient donc de là. Dans ton exemple tu recherches "robert" alors que tu veux modifier "julien" en "robert" si j'ai bien compris.
Cherche donc julien, robert n'existant pas
Marsh Posté le 11-02-2007 à 16:20:49
Bin je comprends pas bien
Ma DataTable contient au début une ligne :
id = "1" (primary key)
membre = "julien"
Quand je fais un LoadDataRow(row), avec row = ("1", "robert" ), bin d'après MSDN, ça devrait rechercher une ligne contenant avec id="1" dans ma DataTable (indépendamment du membre comme tu le dis).
Et comme j'ai bien une ligne avec id="1", bin ça devrait updater la ligne ("1", "julien" ) et ("1", "robert" ).
Or dans mon cas, ça insert une nouvelle ligne
Pourtant, j'ai bien défini la première column de ma DataTable comme Primary Key... bizarre.
Merci bien en tout cas
Marsh Posté le 11-02-2007 à 20:31:58
sinon suffit de traiter l'event RowUpdating de ta datatable ou dataset (je ne sais plus). Ce qui déclenchera à chaque change l'event et la tu construit via les paramètres qui te sont passé une requête CUSTOM.
Et lorsque tu feras UPDATE, il prendra tout les requêtes CUSTOM qui auront été chargée dans les Events déclenché (RowUpdating) et updatera ta DB à ta guise. C'est de loin la meilleur solution étant donné que tu le fais comme toi tu le veux.
Marsh Posté le 12-02-2007 à 09:11:11
Roodie a écrit : Bin je comprends pas bien |
LoadDataRow te load une ligne existante, tu dois donc chercher "1", "julien" si c'est ce que tu as dans ta DataTable. Ensuite tu modifes "julien" en "robert" puis tu update.
Marsh Posté le 12-02-2007 à 17:36:55
Mais nan pikti
T'as pas compris ce que fait (ou est censé faire) le LoadDataRow()
MSDN dit :
Citation : Recherche et met à jour une ligne spécifique. Si aucune ligne correspondante n'est détectée, une nouvelle ligne est créée à l'aide des valeurs données. |
Donc si ma DataTable contient ("1", "julien" ) et que je fais LoadDataRow de ("1", "robert" ), et bien la méthode devrait voir que l'ID clé primaire "1" existe et donc update "julien" en "robert" (et non rajouté une ligne).
T'es d'accord avec ça ?
En tout cas sur Internet, ya pas mal de gens qui ont eu mon problème, et les solutions proposées ne marchent pas chez moi
Et si vraiment ça ne marche pas, je ferai tout à la main comme tu le proposes moi23372
Donc si qqn a une idée
Mici bien en tout cas.
Marsh Posté le 10-02-2007 à 14:24:38
Bonjour
Je m'arrache les cheveux en essayant de mettre à jour ma BdD SQL à partir d'une DataTable. J'ai essayé tt ce que j'ai trouvé sur Internet
Voici mon code simplifié :
Et bien il se trouve que ma base de données n'est jamais updatée. J'ai essayé avec LoadDataRow() et ça marche pas mieux.
Si qqn a une ptite idée, ça serait gentil
Merci bien.
Message édité par Roodie le 10-02-2007 à 14:26:45