ADO.NET. Управление базами данных. Связь по схеме OLE DB провайдера. Коррекция стилей DataGridView, страница 46

·  Метод InitVars — инициализирует ссылки на таблицы: tableStuds, tableExams и связь между ними relationMen_Exams.

·  Два конструктора. Один из них пользуется услугами метода InitClass, а второй создает набор данных на основе схемы, прочитанной из файла.

·  Метод ReadXmlSerializable — позволяет прочесть весь набор данных из файла.

·  Метод GetSchemaSerializable — позволяет записать схемы таблиц в поток и тут же прочесть их. Интересно, что для этой цели он пользуется не файлом, а потоком в памяти (объектом класса MemoryStream). Такое решение повышает эффективность обработки данных, так как отпадает необходимость в файле и буфере его поддержки.

·  Метод Clone — создает копию набора данных. Для этого сначала используется базовая версия метода Clone, которая копирует только структуру набора данных (схемы таблиц, связи и ограничения). Затем происходит вызов InitVars.

·  Метод SchemaChanged — является обработчиком события CollectionChanged, которое генерируется объектом класса DataTableCollection. Такие объекты имеются в каждом наборе данных. Мы неоднократно пользовались ими ранее (например, когда обращались к свойству Tables класса DataSet).

Обратите внимание, что оба конструктора вводят по два делегата типа CollectionChangeEventHandler в список делегатов события CollectionChanged, что дает возможность реагировать на изменения в составе двух коллекций Tables и Relations, имеющихся в любом наборе данных. Оба делегата связаны с одним и тем же обработчиком SchemaChanged. Внутри общей функции обработки SchemaChanged вызывается метод InitVars.

Инструмент студии MSDataSetGenerator

Чтобы воспользоваться сгенерированным студией набором данных StudExams, необходимо затратить минимум усилий. В файле MainForm.cs замените два вхождения DataSet на StudExams, в методе ConnectAndRead удалите код создания ограничения и связи между таблицами, так как эти объекты уже объявлены в типизированном наборе данных.

Запустите приложение и убедитесь, что в его работе ничего не изменилось. Данные обеих таблиц читаются, синхронизация таблиц не нарушена, и даже простые обновления данных проходят успешно. Но в данный момент мы пользуемся далеко не всеми возможностями автоматически генерируемых классов ADO.NET. При обновлении данных приложение пользуется тем адаптером, который создан вручную.

Мастер студии, опираясь на файл XSD, создал урезанное множество классов, в нем нет специализированных адаптеров связи с БД. Поэтому мы повторим процедуру создания объектов ADO.NET, но в этот раз обратимся к мастеру Data Source Configuration Wizard, который использует инструмент студии MSDataSetGenerator.

·  Поставьте фокус на узел дерева Students.xsd в окне Solution Explorer и, нажав клавишу Delete, уничтожьте его и все вложенные в него элементы (файлы).

·  В контекстном меню папки Data выберите команду Add®Existing item, найдите файл c БД (Students.mdb) и нажмите кнопку Add.

·  В диалоге Data Source Configuration Wizard выберите все таблицы и нажмите кнопку Finish.

Это действие включает инструмент студии MSDataSetGenerator, который генерирует новый файл StudentsDataSet. Designer.cs и пару служебных файлов, используемые дизайнером для запоминания деталей отображения схемы. Новое множество классов сильно отличается от предыдущего. Создайте диаграмму классов (команда View Class Diagram контекстного меню над файлом StudentsDataSet.Designer.cs) и убедитесь в этом.

Теперь в множество классов, созданных мастером, входят два адаптера связи и TableAdapterManager. Раскройте элементы диаграммы классов, просмотрите их структуру и убедитесь, что генератор создал 2 новых пространства имен Watson.Data.StudentsDataSetTableAdapters и Watson.Data.ExamsDataSetTableAdapters и в них объявлены 2 специализированных адаптера связи с БД.

·  Откройте файл StudentsDataSet.xsd. Убедитесь, что графическое отображение схемы набора данных теперь имеет другой, более сложный вид. По сути вы видите не схему, а окно дизайнера типизированного DataSet.