У меня есть, я уверен, типичная ситуация.
У меня есть БД, и у меня есть XML-документ данных. Я хотел бы объединить 2 и обновить БД.
Я «заполнил» DataSet и / или DataTable данными БД, и если я изменю данные в этой структуре, я могу вызвать Update, и все в порядке.
Вот что у меня есть.
con.Open();
adapter.Fill(ds2, "BASIC");
ds.ReadXmlSchema(@"C:\asis.xsd");
ds.ReadXml("c:\\asis.xml");
// This is the XML data
DataTable loadeddt = ds.Tables["BASIC"];
// This is from the DB
DataTable dbdt = ds2.Tables["BASIC"];
// I want to put the data from xml into the dataset from the DB
dbdt.Merge(loadeddt);
// I want to them put those changes in the db
adapter.Fill(dbdt);
Вот что происходит, перед тем как я загрузил XSD, я получил исключение о том, что типы не совпадают.
Теперь я ничего не получаю, без исключений, без изменений. ни DataTable не показывают изменений, ни DB не изменяются.
Может кто-нибудь предложить какие-либо предложения?
Если я изменю последнюю строку на Обновление, я получу следующее:
Нарушение ограничения PRIMARY KEY 'PK_BASIC'. Невозможно вставить повторяющийся ключ в объект 'dbo.BASIC'.
Я заметил, что если вы выполняете .Rows.Count до / после слияния, количество записей увеличивается от 10 до 20, поэтому он объединяет их ... а не объединяет. Argh!
БОЛЬШЕ, если я вызову dbdt.GetChanges (); это возвращает всю партию. если я принимаю изменения и обновляю его, он все равно ничего не делает.