Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка приложений баз данных (Visual Studio 2008).docx
Скачиваний:
143
Добавлен:
26.03.2016
Размер:
1.01 Mб
Скачать

Слияние наборов данных

Содержимое набора данных можно обновлять с помощью слияния, т. е. при помощи копирования содержимого одного набора данных (называемого исходным набором данных) в вызывающий набор данных (называемый конечным набором данных). При слиянии наборов данных новые записи из исходного набора добавляются в конечный набор. Дополнительные столбцы исходного набора добавляются в конечный набор. Слияние наборов данных бывает полезным, если вы имеете локальный набор данных и получаете второй набор данных из другого приложения или компонента, например из веб-службы XML. Оно также полезно при необходимости интегрировать данные из нескольких наборов данных.

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

DataRowVersion

Целевой набор данных

Исходный набор данных

До преобразования

James Wilson

James C.Wilson

Текущий

Jim Wilson

James C.Wilson

Вызов метода Mergeв таблице выше с preserveChanges=false targetDataset.Merge(sourceDataset) дает следующее:

DataRowVersion

Целевой набор данных

Исходный набор данных

До преобразования

James C.Wilson

James C.Wilson

Текущий

James C.Wilson

James C.Wilson

Вызов метода Merge с preserveChanges = true targetDataset.Merge(sourceDataset, true) дает следующее:

DataRowVersion

Целевой набор данных

Исходный набор данных

До преобразования

James C.Wilson

James C.Wilson

Текущий

Jim Wilson

James C.Wilson

Внимание

В сценарии preserveChanges = true после вызова метода RejectChangesдля записи в конечном наборе данных он затем вернется к исходным данным из набора данных источника. Это означает, что если требуется обновить исходный источник данных с помощью конечного набора данных, может получиться так, что исходная строка для обновления не будет найдена. Однако можно предотвратить нарушение параллелизма, заполнив другой набор данных обновленными записями из источника данных и затем выполнив слияние. (Нарушение параллелизма происходит, когда другой пользователь изменяет запись в источнике данных после заполнения набора данных.) Дополнительные сведения см. в разделеУправление одновременным доступом в ADO.NET.

Ограничения на обновление

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

Для предотвращения преждевременных нарушений ограничений можно временно приостановить действие ограничений на обновления. Это служит двум целям.

  • Предотвращение ошибок, генерируемых при обновлении одного столбца и до перехода к другому.

  • Предотвращение инициирования некоторых событий обновления (событий, часто используемых для проверки).

После завершения обновления можно снова разрешить проверку ограничений, что также разрешает события обновления и инициирует их.

Примечание. В Windows Forms архитектура привязки данных, встроенная в таблицу, приостанавливает проверку ограничения до того, как процесс не перейдет к другой строке, поэтому нет необходимости в явном виде вызывать методы BeginEdit, EndEdit или CancelEdit.

Ограничения автоматически запрещаются, когда в наборе данных вызывается метод Merge. Если после выполнения слияния остается много ограничений, которые невозможно разрешить, создаетсяConstraintException. В этом случае свойствуEnforceConstraintsприсваивается значение false, и все нарушения ограничений должны быть разрешены до сброса свойстваEnforceConstraintsна значение true.

После завершения обновления можно снова разрешить проверку ограничений, что также разрешает события обновления и инициирует их.

За дополнительными сведениями о делегатах обратитесь к разделу Практическое руководство. Отключение ограничений при заполнении набора данных.