Синхронизировать DataSet - PullRequest
       9

Синхронизировать DataSet

3 голосов
/ 01 октября 2008

Каков наилучший подход к синхронизации DataSet с данными в базе данных? Вот параметры:

  • Мы не можем просто перезагрузить данные, потому что они привязаны к элементу управления пользовательского интерфейса, который пользователь может настроить (это древовидная сетка, которую они могут развернуть / свернуть)
  • Мы не можем использовать флаг изменения (например, UpdatesTimeStamp) в базе данных, потому что изменения не всегда проходят через приложение (например, администратор БД может обновить поле с помощью оператора SQL)
  • Мы не можем использовать триггер обновления в базе данных, потому что это многопользовательская система
  • Мы используем ADO.NET DataSets
  • Несколько полей могут изменить данную строку

Я посмотрел на возможность слияния DataSet, но, похоже, это не поддерживает понятие столбца «ID». Я рассмотрел возможности DiffGram, но проблема здесь заключается в том, что они, по-видимому, генерируются изменениями в одном и том же наборе данных, а не изменениями, которые произошли в каком-то внешнем источнике данных.

Я какое-то время работал с этим решением, но я знаю, что сработал бы (с большой неэффективностью) построение отдельного DataSet и затем итерация всех строк, применяя изменения, поле за полем, к DataSet на который связан.

У кого-нибудь был подобный сценарий? Что вы сделали, чтобы решить проблему? Даже если вы не сталкивались с подобной проблемой, любая рекомендация по ее решению приветствуется.

Спасибо

Ответы [ 2 ]

1 голос
/ 01 октября 2008

DataSet.Merge хорошо работает для этого , если , у вас есть первичный ключ, определенный для каждой DataTable; DataSet будет генерировать измененные события для любых элементов управления GUI с привязкой к данным

если ваша таблица небольшая, вы можете просто перечитать все строки и периодически объединяться, в противном случае неплохо было бы ограничить чтение набора с помощью временной отметки - просто попросите администраторов баз данных следовать правилам и обновить временную отметку; -)

другой вариант - который немного труден - состоит в том, чтобы сохранить очередь измененных строк (временную метку, идентификатор строки) с помощью триггера или хранимой процедуры и основывать запросы на обновление на временной метке в очереди; это будет более эффективно, если в базовой таблице много строк, что позволит вам (через внутреннее соединение записи очереди) извлечь только измененные строки с момента последнего опроса.

0 голосов
/ 01 октября 2008

Я думаю, что было бы проще сохранить список узлов, которые расширил пользователь (при условии, что вы можете уникально идентифицировать каждый из них), затем повторно загрузить данные и повторно привязать их к древовидному представлению, а затем развернуть все ранее развернутые узлы.

...