Je rencontre des problèmes avec ADO.NET 2.0 fusion/importation de données. J'ai besoin de mettre à jour/insérer des données d'une table générique à une autre table avec les deux tables conservant un schéma identique. Le code suivant fonctionne très bien localement, mais ne fait pas de modifications à la base de données:DataTable.Merge et DataTable.ImportRow ne changent pas RowState
OleDbDataAdapter localDA = loadLocalData();
OleDbDataAdapter hostedDA = loadHostedData();
DataSet dsLocal = new DataSet();
localDA.Fill(dsLocal);
DataSet dsChanges = new DataSet();
hostedDA.Fill(dsChanges);
dsLocal.Tables[0].Merge(dsChanges.Tables[0],false);
localDA.Update(dsLocal.Tables[0]);
en est de même avec cet extrait de code:
OleDbDataAdapter localDA = loadLocalData();
OleDbDataAdapter hostedDA = loadHostedData();
DataSet dsLocal = new DataSet();
localDA.Fill(dsLocal);
DataSet dsChanges = new DataSet();
hostedDA.Fill(dsChanges);
foreach (DataRow changedRow in dsChanges.Tables[0].Rows)
{
if (recordExists(dsLocal.Tables[0], changedRow["ID"]))
{
}
else
{
dsLocal.Tables[0].ImportRow(changedRow);
}
}
localDA.Update(dsLocal.Tables[0]);
Quand je regardais la propriété RowState pour changement/annexe les lignes restent "inchangées". Je veux éviter si possible les données mappant les colonnes, ce que je devrais faire en utilisant la méthode NewRow() et en modifiant une ligne existante.
Je peux trouver une solution qui modifie RowState lors de l'utilisation de ImportRow. L'extrait de code suivant fonctionnera: dsLocal.Tables [0] .ImportRow (changedRow); dsLocal.Tables [0] .Rows [dsLocal.Tables [0] .Rows.Count - 1] .SetAdded(); Cependant, cela ne fonctionne que sur l'ajout de lignes et non sur la mise à jour des lignes. Toute idée sur la fusion serait très utile! –