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

Все способы имеют свои преимущества и недостатки. Использование атрибутов дает меньший объем документа. Использование элементов дает большую гибкость при внесении изменений. Например, вы можете разбить имя на три составляющие: FirstName, MiddleName и LastName и изменять их независимо. С помощью атрибутов сделать это сложнее. Другим преимуществом использования элементов является то, что с помощью атрибута сложно задать несколько телефонов (каждый атрибут должен встречаться один раз), а с помощью элементов—легко.

<Customer CustID="102">Graem Malcolm

  <Phone>555-3344</Phone>

  <Phone>8-921-922-5333</Phone>

  <Phone>8-921-933-5444</Phone>

</Customer>

Анализ XML-документа

Создайте копию старого проекта StudentsOleDb, в котором мы работали с объектами DataSet и DbDataAdapter. Переименуйте его в Watson. Это имя выбрано в честь автора книги (Karli Watson. Beginning C# 2005 Databases), материалы которой использованы в этом разделе.

·  С помощью рефакторинга переименуйте пространство имен (namespace Watson).

·  В папку проекта вложена папка Data, в которой находится файл с базой данных Students.mdb. Если папка отсутствует, то создайте ее с помощью контекстного меню окна Solution Explorer. В нее мы добавим файлы с данными (xml и xsd).

В проекте имеется объект ds класса DataSet. Посмотрим, как будут выглядеть данные DataSet, если сохранить их двумя разными способами: методом WriteXml класса DataSet и методом Serialize, класса BinaryFormatter. Наиболее просто реализовать метод WriteXml, который имеет 8 совмещенных версий.

·  Добавьте в BindingNavigator кнопку с именем btnSaveXml и текстом Save XML.

·  Добавьте ветвь обработки ее нажатия в метод bn_ItemClicked.

  case "Save XML": ds.WriteXml (@"..\..\Data\Students.xml", XmlWriteMode.WriteSchema); break;

Режим записи набора данных настраивается с помощью перечисления XmlWriteMode. Оно имеет такие значения: DiffGram, IgnoreSchema, WriteSchema. Установка DiffGram записывает весь DataSet, включая original и current-значения. Чтобы записать только changed (измененные) значения, надо вызвать GetChanges (он вернет новый DataSet), а затем вызвать WriteXml и задать DiffGram. Установка IgnoreSchema записывает DataSet без схемы, а WriteSchema записывает в XML-файл и схему и данные.

·  Запустите приложение и нажмите кнопку Save XML.

·  Закройте приложение и откройте файл Students.xml в рамках студии.

Студия, как вы знаете, имеет целый набор специальных редакторов, один из которых используется для просмотра и редактирования XML-файлов. Установка режима записи WriteSchema обеспечила вывод в файл Students.xml схемы документа, так и его данных. Вслед за корневым элементом <StudsExams> идет схема, она ограничена тегами <xs:schema> . . .</xs:schema>. За ней следуют данные. Рассмотрим сначала содержимое XML-документа.

<?xml version="1.0" standalone="yes"?>

<StudsExams>

. . . <!-- Здесь следует схема документа. Мы рассмотрим ее позже -->

. . . <!-- Далее следует сам документ. Рассмотрим его фрагиент -->

<Studs>

  <StudID>1</StudID>

  <Name>Василий Кузнецов</Name>

  <Phone>111-11-11</Phone>

  <Addr>Большой пр. 11-111</Addr>

</Studs>

<Studs>

  <StudID>2</StudID>

   <Name>Илья Перевалов</Name>

  . . .

</Studs>

. . <!-- После таблицы студентов следуют данные таблицы экзаменов -->

<Exams>

  <ExamID>1</ExamID>

  <StudID>1</StudID>

  <Course>Math</Course>

  <Credit>true</Credit>

  <Date>2006-01-01T00:00:00+03:00</Date>

  <Mark>5</Mark>

</Exams>

<Exams>

  <ExamID>2</ExamID>

  <StudID>1</StudID>

. . . <!-- Данные других экзаменов -->

</Exams>

</StudsExams>

В документе XML выделяют следующие компоненты: