private void RecopieDonneesDeBase(DataRow row) { string strRequete = GetRequetePourRecupererLesDonnéesApresModification(row); IDbCommand commande = UpdateCommand.Connection.CreateCommand(); commande.Connection = UpdateCommand.Connection; commande.Transaction = UpdateCommand.Transaction; commande.CommandText = strRequete; if (commande.Connection.State != ConnectionState.Open) { commande.Connection.Open(); } bool bOldEnforce = row.Table.DataSet.EnforceConstraints; row.Table.DataSet.EnforceConstraints = false; IDataReader reader = commande.ExecuteReader(CommandBehavior.SingleRow); if (reader != null && reader.Read()) { for (int nField = 0; nField < reader.FieldCount; nField++) { if (row.Table.Columns[reader.GetName(nField)] != null) { object value = reader.GetValue(nField); string strValue = value as string; if (strValue != null && strValue.Trim().Length == 0) { value = strValue.Substring(1, strValue.Length - 1); } row[reader.GetName(nField)] = value; } } } try { row.Table.DataSet.EnforceConstraints = bOldEnforce; } catch { //Erreur lors de l'activation des contraintes, //c'est probablement que les données modifiées par la base ont besoin d'un élément //Parent affecté par le trigger, mais qu'on ne connait pas encore CContexteDonnee ctxDonnee = row.Table.DataSet as CContexteDonnee; if (ctxDonnee != null) { ctxDonnee.AssureParents(row); } row.Table.DataSet.EnforceConstraints = bOldEnforce; } }