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

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


Метод Merge объекта DataSet предназначен для объединения имеющегося содержимого объекта DataSet с содержимым другого объекта DataSet, DataTable или набором строк DataRow:

myDataSet.Merge(newDataSet)

Здесь myDataSet - исходный объект DataSet, newDataSet - новый или другой объект. Представим себе такую ситуацию: у нас имеется объект DataSet, содержащий таблицу "Туристы". Другой объект DataSet содержит таблицу "Туры". Каждая из этих таблиц в своем объекте DataSet представлена соответствующими объектами DataTable. После вызова метода Merge основного объекта DataSet он будет содержать таблицу со своими исходными столбцами и новыми. Поскольку записи в обеих таблицах независимы, пустые ячейки будут заполнены значениями null (рис. 13.15):


увеличить изображение
Рис. 13.15.  Метод Merge. Объединение двух таблиц с различной структурой

На практике более интересен случай объединения таблиц с одинаковой структурой. При их объединении будет происходить формирование новой таблицы с распределением записей согласно значениям первичного ключа (рис. 13.16):


увеличить изображение
Рис. 13.16.  Метод Merge. Объединение двух таблиц с одинаковой структурой

Клиентское приложение, как правило, предоставляет несколько режимов изменения данных. После завершения редактирования возникает проблема объединения всех исправлений в один объект DataSet для последующей их отправки в базу данных. Создание нескольких объектов DataSet с идентичной структурой и применение метода Merge - оптимальный способ решения этой задачи.

Создайте новое Windows-приложение и назовите его "MergeMethod". При помощи визуальных средств студии настраиваем подключение к базе данных Microsoft SQL "BDTur_firm2" для извлечения таблицы "Туристы". Названия объектов ADO .NET оставляем по умолчанию. Добавляем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение Fill. Для отключения доступности элемента его свойству Enabled устанавливаем значение "False".
Переходим в окно Solution Explorer, щелкаем правой кнопкой на имени проекта MergeMethod, в появившемся меню переходим к пункту "Add \ Add New Item". В появившемся окне выбираем новый шаблон "Windows Form" и нажимаем кнопку "Open". Устанавливаем следующие значения свойств новой формы:

Form2, свойствоЗначение
FormBorderStyleFixedSingle
MaximizeBoxFalse
MinimizeBoxFalse
Size250; 220
TextДобавление туриста
Подключаем пространство имен Data:

using System.Data;

В классе формы создаем объект DataTable:

public DataTable dtNewTourist = null;

Открываем проект Change_Data (мы работали с ним в этой лекции), выделяем четыре текстовых поля и четыре соответствующих надписи, копируем их, затем размещаем их на форме Form2 в текущем проекте. Добавляем на форму кнопку, в свойстве Name вводим "btnOK", в свойстве Text - "&OK". В обработчике этой кнопки создаем запись DataRow, в которую будут помещаться значения, вводимые в текстовые поля:

private void btnOK_Click(object sender, System.EventArgs e) { DataRow drNewTourist = dtNewTourist.NewRow(); drNewTourist["Кодтуриста"] = txtID.Text; drNewTourist["Фамилия"] = txtLastName.Text; drNewTourist["Имя"] = txtFirstName.Text; drNewTourist["Отчество"] = txtMiddleName.Text; dtNewTourist.Rows.Add(drNewTourist); this.Close(); }

Переключаемся в режим дизайна главной формы. Добавляем на форму элемент управления Panel, его свойству Dock устанавливаем значение "Bottom". Из окна Toolbox перетаскиваем на панель кнопку, в свойстве Name вводим "btnAdd", в свойстве Text - "&Добавить". В обработчике этой кнопки вызываем вторую форму и в случае подтверждения диалога объединяем изменения, вызывая метод Merge:

private void btnAdd_Click(object sender, System.EventArgs e) { Form2 f2 = new Form2(); //Определяем структуру объекта dtNewTourist f2.dtNewTourist = dataSet11.Tables["Туристы"]; if(f2.ShowDialog() == DialogResult.OK) { //Создаем объект dtForMerge для передачи // конструктору метода Merge DataTable dtForMerge = f2.dtNewTourist; dataSet11.Merge(dtForMerge); } }



Здесь мы применили четвертый из семи возможных конструкторов метода Merge (рис. 13.17):


Рис. 13.17.  Конструктор метода Merge

В конструкторе формы заполняем объект DataSet и определяем источник данных для элемента DataGrid:

public Form1() { InitializeComponent(); sqlDataAdapter1.Fill(dataSet11); dataGrid1.DataSource = dataSet11.Tables[0].DefaultView; }

Наконец, в обработчике события Closing формы передаем изменения в базу данных:

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { sqlDataAdapter1.Update(dataSet11); }

Запускаем приложение. При нажатии на кнопку "Добавить" появляется окно "Добавление туриста", в котором вводятся значения полей. После закрытия этого окна новая запись появляется в таблице (рис. 13.18):


Рис. 13.18.  Готовое приложение MergeMethod

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


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