Объекты DataSet и DataTable предоставляют перегруженный метод GetChanges, конструктор которого имеет следующий вид (рис. 13.13):

Метод GetChanges возвращает новый объект DataSet или DataTable cо структурой исходного объекта, но содержащий только измененные записи из исходного объекта. На рис. 13.13 исходными объектами являются myDataSet и myDataTable, а новыми, созданными методом GetChanges - newDataSet и newDataTable. Применяя в качестве параметра значение перечисления DataRowState, можно получить записи с конкретным состоянием, например, только удаленные (Deleted) или добавленные (Added).
При передаче изменений в базу данных отправка объекта DataSet, полученного в результате вызова метода GetChanges, позволяет уменьшить объем трафика. В самом деле, отправка только внесенных изменений при прочих равных условиях займет меньше ресурсов, чем отправка полного объекта DataSet. Это становится особенно важным при работе с большими объемами данных или значительным числом подключений.
Метод GetChanges также применяется в качестве своеобразного сигнального флага, сообщающего, были ли затронуты данные. Создайте новое Windows-приложение и назовите его "GetChangesMethod". С помощью визуальных средств студии4) настраиваем подключение к базе данных Microsoft SQL "BDTur_firm2" для извлечения таблицы "Туристы". Названия объектов ADO .NET оставляем по умолчанию. В конструкторе формы заполняем данными объект DataSet11 и затем выводим их в элемент DataGrid:
public Form1() { InitializeComponent(); sqlDataAdapter1.Fill(dataSet11); dataGrid1.DataSource = dataSet11.Tables[0].DefaultView; }
В обработчике события Closing формы проверяем изменения в объекте DataSet11 при помощи метода GetChanges и в случае их наличия выводим диалоговое окно:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { DataSet ds = dataSet11.GetChanges(); if(ds == null) return; if(MessageBox.Show("Вы хотите сохранить изменения в базе данных?", "Завершение работы", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) sqlDataAdapter1.Update(ds); }
Запускаем приложение. При закрытии формы после внесения изменений появляется диалоговое окно, в котором предлагается изменения сохранить (рис. 13.14):

В программном обеспечении к курсу вы найдете приложение GetChanges Method (Code\Glava6\ GetChangesMethod).