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
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();
            }
        }
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 !
Merci de votre aide, je rame un peu avec cette nouveauté pour moi.