Mam problemy z łączeniem/importowaniem danych ADO.NET 2.0. Muszę zaktualizować/wstawić dane z jednej ogólnej tabeli do innej tabeli przy obu tabelach zachowując identyczny schemat. Poniższy kod działa świetnie lokalnie, ale nie dokonywać zmian w bazie danych:DataTable.Merge i DataTable.ImportRow nie zmieniają 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]);
Tak samo jest z tym fragmencie kodu:
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]);
Kiedy spojrzałem na miejscu RowState dla zmienił/dołączany wiersze pozostają "niezmienione". Chcę, jeśli to możliwe, uniknąć mapowania danych kolumn, co może być konieczne przy użyciu metody NewRow() i modyfikacji istniejącego wiersza.
Mogę wymyślić rozwiązanie, które modyfikuje RowState podczas korzystania z ImportRow. Poniższy fragment kodu zadziała: dsLocal.Tables [0] .ImportRow (changedRow); dsLocal.Tables [0] .Rows [dsLocal.Tables [0] .Rows.Count - 1] .SetAdded(); Działa to jednak tylko w przypadku dołączania wierszy i nie aktualizowania wierszy. Wszelkie pomysły na scalanie będą bardzo pomocne! –