Технология Microsoft ADO.NET

       

Метод GetChanges объекта DataSet


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


увеличить изображение
Рис. 13.13.  Метод GetChanges. A - конструктор для объекта DataSet, Б - конструктор для объекта DataTable

Метод 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):


Рис. 13.14.  Готовое приложение GetChangesMethod

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



Содержание раздела