Книга: Обработка баз данных на Visual Basic®.NET

Чтение XML-данных

Чтение XML-данных

В ADO.NET предусмотрены богатые и разнообразные инструменты чтения и записи XML-данных и XML-схем. Далее рассматриваются основные способы использования предназначенных для этого методов и свойств.

Как и в предыдущих главах, для демонстрации взаимодействия модели ADO.NET и XML здесь приводится практический пример их использования на основе простой формы.

1. Запустите интегрированную среду разработки Visual Studio .NET и создайте новый проект Visual Basic Windows Application. Для этого в диалоговом окне New Project (Новый проект) выберите тип проекта Visual Basic Project в области Project Types (Типы проектов), а затем шаблон Windows Application (Приложение Windows) в области Templates (Шаблоны).

2. Назовите проект ADO-XML.

3. Укажите путь к файлам проекта.

4. Увеличьте размер формы Form1.

5. В окне свойств Properties укажите значение frmXML для свойства (Name) и значение ADO.NET and XML для свойства Text формы Form1.

6. В верхнем левом углу формы создайте кнопку, перетаскивая ее из панели элементов управления.

7. В окне свойств Properties укажите значение btnReadXML для свойства (Name) и значение Read XML для свойства Text этой кнопки.

8. В правой части формы создайте сетку DataGrid, перетаскивая ее из панели элементов управления.

9. В окне свойств Properties укажите значение grdData для свойства (Name) сетки.

10. Увеличьте размер сетки grdData, чтобы она занимала до 80% всей площади формы.

В верхней части файла введите следующий код:

Imports System
Imports System.Data
Imports System.Data.SqlClient

Затем в определении класса формы frmXML введите код из листинга 10.1.

Листинг 10.1. Код чтения содержимого XML-файла в объект DataSet

Private Sub btnReadXML_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles btnReadXML.Click
 Dim dsPubs As New DataSet()
 ' Чтение XML-данных из файла.
 dsPubs.ReadXml("..Pubs.xml")
 ' Связывание объекта DataSet с сеткой данных DataGrid.
 grdData.DataMember = "publishers"
 grdData.DataSource = dsPubs
End Sub

Эта подпрограмма считывает XML-данные из файла pubs.xml в объект DataSet. Теперь объект DataSet и его данные могут использоваться любым из способов, описанных в предыдущих главах. Кроме того, эта подпрограмма связывает объект DataSet с сеткой данных DataGrid. В листинге 10.2 показано содержимое файла pubs.xml, а на рис. 10.1 — данные в сетке DataGrid.


РИС. 10.1. Содержимое файла pubs.xml в сетке DataGrid

Листинг 10.2. Содержимое файла pubs.

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
 <publishers>
  <pub_id>0736</pub_id>
  <pub_name>New Moon Books</pub_name>
  <city>Boston</city>
  <state>MA</state>
  <country>USA</country>
 </publishers>
 <publishers>
  <pub_id>0877</pub_id>
  <pub_name>Binnet & Hardley</pub_name>
  <city>Washington</city>
  <state>DC</state>
  <country>USA</country>
 </publishers>
 <publishers>
  <pub_id>1389</pub_id>
  <pub_name>Algodata Infosystems</pub_name>
  <city>Berkeley</city>
  <state>CA</state>
  <country>USA</country>
 </publishers>
 <publishers>
  <pub_id>1622</pub_id>
  <pub_name>Five Lakes Publishing</pub_name>
  <city>Chicago</city>
  <state>IL</state>
  <country>USA</country>
 </publishers>
 <publishers>
  <pub_id>1756</pub_id>
  <pub_name>Ramona Publishers</pub_name>
  <city>Dallas</city>
  <state>TX</state>
  <country>USA</country>
 </publishers>
 <publishers>
  <pub_id>9952</pub_id>
  <pub_name>Scootney Books</pub_name>
  <city>New York</city>
  <state>NY</state>
  <country>USA</country>
 </publishers>
 <publishers>
  <pub_id>9999</pub_id>
  <pub_name>Lucerne Publishing</pub_name>
  <countгу>France</country>
 </publishers>
</NewDataSet>

НА ЗАМЕТКУ

После вызова метода ReadXML для загрузки данных в объект DataSet для свойства RowState всех новых строк задается значение Added. Этот подход отличается от принятого по умолчанию поведения, когда для загрузки данных в объект DataSet из базы данных используется объект DataAdapter и для свойства RowState всех новых строк задается значение Unchanged. Такой подход позволяет загружать данные из XML-источника и вставлять их в таблицу базы данных. Если вы не хотите этого делать, то можно с помощью метода AcceptChanges переустановить значение Unchanged для свойства RowState всех новых строк. Для изменения принятого по умолчанию поведения при загрузке данных в объект DataSet из базы данных можно указать значение False для свойства АсcеptChangesOnFill что приведет к автоматической установке значения Added для свойства RowState всех новых строк.

В данном примере демонстрируется простейший способ чтения XML-данных в объект DataSet, т.е. чтение из файла. Помимо этого способа, существует много других вариантов чтения XML-данных с помощью перегруженных версий метода ReadXML, например с помощью объектов Stream, TextReader или XmlReader. Соответствующие им перегруженные версии метода ReadXML содержат второй параметр со значением XmlReadMode. Этот параметр используется для указания способа интерпретации содержимого XML-источника и обработки схемы данных. В табл. 10.1 приведено краткое описание членов перечисления XmlReadMode.

Таблица 10.1. Перечисление XmlReadMode 

Имя члена перечисления Описание
ReadSchema Считывает любую встроенную схему и загружает ее вместе с данными в объект DataSet. Таблицы, определенные в схеме, вставляются в объект Data-Set, но если схема определяет таблицу, которая уже есть в этом наборе данных, то генерируется исключительная ситуация
IgnoreSchema Игнорирует любую встроенную схему и загружает данные в объект DataSet с помощью существующего определения схемы. Любые данные, которые не соответствуют схеме объекта DataSet, игнорируются и не загружаются. Аналогично, если схема не определена, то данные не загружаются
InferSchema Игнорирует любую встроенную схему и выводит схему на основе структуры данных, а затем загружает данные в объект DataSet. Дополнительные таблицы и поля, определенные в результате такого анализа структуры данных, добавляются в уже существующую схему в объекте DataSet. В случае конфликта определений генерируется исключительная ситуация
Fragment Считывает все существующие XML-фрагменты и загружает данные в объект DataSet. Любые данные, которые не соответствуют схеме в объекте DataSet, игнорируются и не загружаются
DiffGram Считывает данные в формате DiffGram и загружает данные в объект DataSet. Новые записи сливаются с уже существующими записями с такими же значениями уникального идентификатора, в противном случае в объекте DataSet создаются новые записи. В случае несоответствия схем генерируется исключительная ситуация. (Формат DiffGram более подробно описывается далее в главе. — Прим. ред.)
Auto Этот режим используется по умолчанию. При этом выполняется одна из следующих операций: если XML-данные имеют формат DiffGram, то выбирается член DiffGram перечисления XmlReadMode; если схема определена в объекте DataSet или встроена в XML-документ, то выбирается член ReadSchema перечисления XmlReadMode; в остальных случаях выбирается член InferSchema перечисления XmlReadMode  

Для чтения только схемы данных (и игнорирования данных) предусмотрена перегруженная версия метода ReadXmlSchema, которая может применяться для считывания схемы объектов DataTable объекта DataSet так, как показано ниже. MyDataSet.ReadXmlSchema("MySchemaFile.xml")

Те же четыре источника данных (файл, объекты Stream, TextReader и XmlReader) могут использоваться вместе с методом ReadXmlSchema. Объект DataSet имеет аналогичный набор методов для записи XML-данных.

Оглавление книги


Генерация: 1.219. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз