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

Получение измененных записей

Не все записи в наборе данных обновляются. Например, пользователь может работать с элементом управления Windows Forms DataGridView, отображающим множество записей. Однако пользователь может обновить только несколько записей, удалить одну и вставить одну. Для возвращения только измененных строк наборы и таблицы данных предоставляют метод (GetChanges).

Можно создавать подмножества измененных записей с помощью метода GetChangesтаблицы данных или самого набора данных (GetChanges). При вызове метода для таблицы данных происходит возврат копии таблицы только с измененными записями. Аналогично, при вызове метода в наборе данных можно получить новый набор данных, содержащий только измененные записи.GetChangesбез дополнительных параметров возвратит все измененные записи. В противоположность этому, пересылкой нужного в качестве параметраDataRowStateв методGetChangesможно указывать, какое подмножество измененных записей требуется: добавленные записи, помеченные для удаления записи, отсоединенные записи или измененные записи.

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

Внесение изменений в набор данных

При внесении изменений в набор данных устанавливается свойство RowStateизмененных строк. Исходные и текущие версии записей устанавливаются, поддерживаются и становятся доступными при использовании свойстваRowVersion. Метаданные, сохраненные в этих свойствах, представляют изменения, необходимые для отправки соответствующих обновлений источнику данных.

Если изменения отражают текущее состояние источника данных, не требуется сохранять эти сведения. Обычно существует два случая, в которых набор данных и его источник синхронны.

  • Сразу после загрузки сведений в набор данных, например после считывания данных из источника.

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

Можно также выполнять ожидающие изменения набора данных, вызвав метод AcceptChanges. Обычно методAcceptChangesвызывается в приложении в следующих случаях.

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

Примечание. Можно запретить адаптеру автоматическое сохранение изменений при вызове метода Fill, присвоив свойству адаптера AcceptChangesDuringFill значение false. При значении false свойство RowState каждой вставляемой при заполнении строки приобретает значение Added.

  • После отправки изменений набора данных другому процессу, например веб-службе XML.

Внимание. Внесение изменений таким способом удаляет все сведения об изменениях. Нельзя вносить изменения до тех пор, пока все операции, от которых зависит приложение, не будут выполнены при знании всех предыдущих изменений в наборе данных.

Метод AcceptChangesвыполняет следующее:

  • Записывает версию Currentзаписи в версиюOriginalс перезаписью исходной версии.

  • Удаляет все строки, в которых свойство RowStateимеет значениеDeleted.

  • Задает свойству RowStateзаписи значениеUnchanged.

Метод AcceptChangesдоступен на трех уровнях. Его можно вызвать для объектаDataRow, который вносит изменения только для данной строки. Его также можно вызвать для объектаDataTable, чтобы задействовать все строки в таблице, или для объектаDataSet, чтобы выполнить все ожидающие изменения для всех записей всех таблиц набора данных.

Примечание. При загрузке набора данных путем вызова метода Fill адаптера данных необязательно в явном виде принимать изменения. По умолчанию метод Fill вызывает метод AcceptChanges после завершения заполнения таблицы данных.

Связанный метод RejectChangesотменяет изменения путем копированияOriginalверсии обратно вCurrentверсию записей и установкиRowStateкаждой записи обратно вUnchanged.