Bonjour,
J'utilise Visual C# 2005 Express et une base de données access.
Je teste l'enregistrement de données sur 2 tables en maitre détail.
J'ai un dataset "BaseDataSet" qui contient 2 tables : Cave (maitre) et Lots (détail). J'ai suivi ce tuto :
http://msdn2.microsoft.com/fr-fr/library/xzb1zw3x.aspx
Voilà mon code
Voilà, en mode débogage, le chemin que prend le code est correct quand un changement a été effectué sur le groupe de données : suppression, modif, .... Je n'ai pas d'exceptions de levées. Par contre, rien n'est enregistré dans la base access !
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 private void UpdateDB() { this.Validate(); this.lotsBindingSource.EndEdit(); this.caveBindingSource.EndEdit(); //Création de trois tables temporaires qui contiendront les enregistrements qui sont différents //par rapport à la base de données //enregistrements supprimés BaseDataSet.LotsDataTable newdeletedLots = (BaseDataSet.LotsDataTable) baseDataSet.Lots.GetChanges(DataRowState.Deleted); //Nouveaux enregistrements BaseDataSet.LotsDataTable newLots = (BaseDataSet.LotsDataTable) baseDataSet.Lots.GetChanges(DataRowState.Added); //enregistrements modifiés BaseDataSet.LotsDataTable newmodifiedLots = (BaseDataSet.LotsDataTable) baseDataSet.Lots.GetChanges(DataRowState.Modified); try { //toujours dans cette ordre //mise à jour des suppressions dans la table détail if (newdeletedLots != null) this.lotsTableAdapter.Update (newdeletedLots); //mise à jour de la table maitre this.caveTableAdapter.Update(baseDataSet.Cave); //mise à jour des nouveaux enregistrements dans la table détail if (newLots != null) this.lotsTableAdapter.Update(newLots); //mise à jour des enregistrements modifiés dans la table détail if (newmodifiedLots != null) this.lotsTableAdapter.Update (newmodifiedLots); //Validation baseDataSet.AcceptChanges(); } catch (System.Exception) { MessageBox.Show("Update failed"); } finally { //Elimination des tables temporaires pour libération des ressources if (newdeletedLots != null) newdeletedLots.Dispose(); if (newLots != null) newLots.Dispose(); if (newmodifiedLots != null) newmodifiedLots.Dispose(); } }
Merci de votre aide, je rame un peu avec cette nouveauté pour moi.
Partager