Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > синхронизация двух dataset


Автор: mal 16.8.2007, 16:16
Здравствуйте. У меня стоит задача написать программу для обмена данными. Данные хранятся на SQL сервере. Решил решить её так:
1. Написал запросы, кототрые выгружают данные в dataset
Код

SqlDataAdapter da1 = new SqlDataAdapter("SELECT * FROM division", Conn);
da1.Fill(ds, "division");

2. Затем сохраняю данные в xml
Код

ds.WriteXml(myFileStream, XmlWriteMode.WriteSchema);

3. Затем читаю xml файл
Код

ds.ReadXml(myFileStream, XmlReadMode.ReadSchema);

4. Получаю новый dataset
Код

SqlDataAdapter da1 = new SqlDataAdapter("SELECT * FROM devices", Conn);
da1.Fill(new_ds, "devices");

5. Теперь нужно записать данные в new_ds из ds.  У обоих ds есть PrimaryKey devices_id
Вот этот шаг у меня не получается.
Помогите, чем сможете.

Добавлено через 4 минуты и 49 секунд
Возможно надо использовать метод Merge, но у меня не получается.

Автор: Experimenter 16.8.2007, 19:19
Цитата

Возможно надо использовать метод Merge, но у меня не получается.

А что именно не получается?
Как вариант: можно через DataRow запись организовать.

Автор: mal 17.8.2007, 08:09
После выполнения
Код

new_ds.Merge(ds);

строки не обновляются, а добавляются.
А мне нужно синхронизировались таблицы по PrimaryKey.

Автор: Idsa 17.8.2007, 08:27
Попробуй перед Fill() для адаптера установить свойство adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

Автор: mal 17.8.2007, 08:39
Спасибо БОЛЬШОЕ. Вроде все получилось.
http://msdn.microsoft.com/library/rus/default.asp?url=/library/RUS/cpref/html/frlrfsystemdatamissingschemaactionclasstopic.asp
Пользователь должен быть осведомлен о возможных побочных эффектах, например о конфликтах с инструкцией SET FMTONLY ON. Что это?

Автор: Idsa 17.8.2007, 10:39
Цитата(mal @  17.8.2007,  08:39 Найти цитируемый пост)
Что это? 

В следующем примере состояние параметра SET FMTONLY изменяется на ON, после чего выполняется инструкция SELECT. В результате этой настройки инструкция возвращает только сведения о столбце; строки с данными не возвращаются.
Код

SET FMTONLY ON;
GO
USE AdventureWorks;
GO
SELECT * 
FROM HumanResources.Employee;
GO
SET FMTONLY OFF;
GO
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)