Реклама:

Метод GetChanges таблицы данных (объект DataTable) public DataTable GetChanges();

public DataTable GetChanges( DataRowState rowState );

возвращает другой объект таблицы данных, коллекция Rows которой включает только измененные записи из исходной таблицы. Вид изменения задает параметр rowState метода GetChanges. Если параметр не указан, подразумеваются все виды изменений.

Пример. Получить в таблице dtChangedRecords все записи, добавленные в таблицу Kaf набора данных dsVUZ1.

System.Data.DataTable dtChangedRecords;

dtChangedRecords = dsVUZ1.Kaf.GetChanges(DataRowState.Added);

_I

6.1.4. Запоминание внесенных изменений в базе данных

Как известно, адаптер данных (объект типа SqlDataAdapter или OleDbData Adapter) связывает таблицу 1 в источнике данных и таблицу в наборе данных.

Метод Fill адаптера переносит (заливает) данные из таблицы источника в таблицу набора, т. е. действует в направлении от источника к набору данных.

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

Из сказанного следует, что изменения, внесенные в каждую таблицу набора данных, переносятся в источник данных методом Update соответствующего адаптера данных. Поэтому в скольких таблицах изменялись данные, столько раз и нужно выполнить метод Update от разных адаптеров. Рассмотрим разновидности метода Update.

Первая переносит в таблицу источника данных все изменения, внесенные те в строки данных, которые содержатся в массиве dataRows:

public int Update( DataRow[] dataRows );

Вторая разновидность метода Update переносит в источник изменения, внесенные во все строки набора данных ds :

public override int Update( DataSet ds);

Третья разновидность метода Update переносит в источник изменения, внесенные во все строки таблицы данных dt:

public int Update( DataTable dt );

Четвертая разновидность метода Update переносит в источник изменения, внесенные во все строки таблицы данных dt набора данных ds :

public int Update( DataSet ds, string dt);

Последняя разновидность метода Update переносит в таблицу источника данных все изменения, внесенные в те строки данных, которые содержатся в массиве dataRows и отображаются в базе данных посредством маппинга tableMapping 1.

protected virtual int Update( DataRow[] dataRows, DataTableMapping tableMapping );

Пример. Запомнить в базе данных изменения, внесенные в записи таблицы Kaf набора данных dsVUZ1.

sqlDataAdapter1.Update(dsVUZ1, "Kaf");

Алгоритм действия метода Update следующий. Сначала просматриваются все записи в массиве или таблице данных, которые заданы как параметры метода. Отыскиваются все записи, у которых свойство RowState содержит значение, отличное от Unchanged (т. е. значения Added, Deleted или Modified). Неизмененные строки, у которых RowState = Unchanged, игнорируются. Понятно, что значение свойства RowState для каждой измененной записи однозначно указывает на вид изменения, внесенного в запись, - добавление, редактирование или удаление. В соответствии с этим для записи и вызывается одна из команд данных, заданных в адаптере - именно в свойствах InsertCommand, UpdateCommand, DeleteCommand адаптера. Выбранная команда выполняет для источника данных один из операторов INSERT,


⇐ Предыдущая страница| |Следующая страница ⇒