Bonjour,
Voici mon problème: je dois mettre à jour 2 tables dont la clé primaire de la première est clé externe de la seconde. J'utilise le code suivant :

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
OracleConnection connexion = new OracleConnection(OraDb);
connexion.Open();
 
OracleCommand command = new OracleCommand();
command.Connection = connexion;
 
command.CommandText = "SELECT USER, SYSDATE, MATABLE.ID, MATABLE.DAT_USRMAJ FROM MATABLE WHERE ROWNUM = 1";
command.CommandType = CommandType.Text;
 
OracleDataAdapter adapter = new OracleDataAdapter();
adapter.SelectCommand = command;
 
OracleCommandBuilder builder = new OracleCommandBuilder(adapter);
 
DataSet dataset = new DataSet();
adapter.Fill(dataset, "TABLE");
 
DataTable Dt = dataset.Tables["TABLE"];
 
// Début de transaction
OracleTransaction transaction = connexion.BeginTransaction(IsolationLevel.ReadCommitted);
// Assign transaction object for a pending local transaction
command.Transaction = transaction;
 
// 1er enregistrement retourné
DataRow row = Dt.Rows[0];
 
// On récupère SYSDATE
string MaDate =  row["SYSDATE"];
 
// Création d'un nouveau row
row = Dt.DataSet.Tables["TABLE"].NewRow();
 
row["ID"] = MaCleTable1;
row["COD_USRMAJ"] = MaDate;
 
// on met à jour 
adapter.Update(rec.dataset, "TABLE");
adapter.Fill(rec.dataset);
 
// puis on fait pareil avec la 2ème table :
[......]
row = Dt.DataSet.Tables["TABLE"].NewRow();
 
row["ID"] = MaCleTable2;
row["COD_USRMAJ"] = MaDate;
row["IDTAB1"] = MaCleTable1;
 
// on met à jour 
adapter.Update(rec.dataset, "TABLE");
adapter.Fill(rec.dataset);
 
transaction.Commit()
Et là çà plante sur le "adapter.Update" car il me dit violation de contrainte sur "row["IDTAB1"] = MaCleTable1" comme s'il semblait ne pas avoir enregistré les infos de la 1ère table.

J'ai raté quelque chose ?
Merci