Чтение онлайн

на главную - закладки

Жанры

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

Прайс Кевин Т.

Шрифт:

 Dim reader As Xml.XmlReader

 Dim str As New System.Text.StringBuilder

 cn.Open

 ' Выполнение SQL-команды Select с предложением FOR XML.

 reader = cmd.ExecuteXmlReader

 ' Поиск и извлечение данных из узлов-элементов.

 While reader.Read

Select Case reader.NodeType

Case Xml.XmlNodeType.Element

str.Append("<" & reader.Name & ">")

Case Xml.XmlNodeType.EndElement

str.Append("</" & reader.Name & ">" & ControlChars.CrLf)

Case Xml.XmlNodeType.Text

str.Append(reader.Value)

Case Else

'
В данном примере игнорируется.

End Select

 End While

 MsgBox(str.ToString)

 сn.Close

End Sub

Код в листинге 10.12 содержит пример упрощенного использования метода ЕхеcuteXmlReader в котором просто отображаются данные (вместе с дескрипторами) из таблицы базы данных pubs. СУБД SQL Server передается показанная ниже SQL-команда Select, в которой явно указаны возвращаемые поля в виде XML-элементов.

"select * from stores for xml auto, elements"

В таком случае обработка разных типов XML-узлов упрощается, потому что достаточно найти только начальный и конечный узлы, а текстовые узлы между ними будут содержать фактические данные. Более надежная обработка XML-документа основана на конструкции Select Case, в которой учтены узлы всех типов. После щелчка на кнопке ExecuteXMLReader будет выполнен код из листинга 10.12 и на экране появится диалоговое окно, которое показано на рис. 10.2.

РИС. 10.2. Диалоговое окно с XML-данными, извлеченными из СУБД SQL Server

Объект XmlDataDocument

В главе 9, "XML и .NET", рассматривается объект XmlDataDocument и способы его использования для доступа к иерархическим данным в виде узлов загруженного в оперативную память XML-документа. В этой книге также рассматриваются способы извлечения реляционных данных (и доступа к ним) из традиционной SQL-совеместимой базы данных. При этом необходимо выяснить следующее:

• как быть, если данные поступили из XML-источника, а нам известны только реляционные способы навигации и манипуляции записями;

• и наоборот: как быть, если данные поступили из SQL-совместимой базы данных, а нам известны только XML-совместимые способы навигации и манипуляции записями.

Ответы на эти простые вопросы основаны на применении объекта XmlDataDocument. Он является производным от класса XmlDocument, но обладает расширенными возможностями. Помимо внутренней копии данных, он содержит XML-совместимые средства доступа к ним как к классу XmlDocument с помощью XML-узлов, а также реляционные средства доступа на основе объекта DataSet. Объект XmlDataDocument автоматически синхронизирует оба эти представления (или,

иначе говоря, способа доступа) таким образом, чтобы любые изменения, выраженные в одной технологии, сразу же отображались средствами другой технологии. Такой подход позволяет легко смешивать и находить соответствие между разными источниками данных на основе разных технологий.

Для демонстрации этих средств вернитесь к проекту ADO-XML и выполните перечисленные ниже действия.

1. Вставьте еще две кнопки в форму frmXML сразу под кнопкой ExecuteXMLReader, перетаскивая их из панели элементов управления.

2. В окне свойств Properties укажите значение btnNavigateSQL для свойства (Name) и значение Navigate SQL для свойства Text первой кнопки.

3. В окне свойств Properties укажите значение btnAddRows для свойства (Name) и значение Add Rows to XML для свойства Text второй кнопки.

4. Для импорта пространства имен XPath включите строку кода Imports System.Xml.XPath в конце списка команд импорта в верхней части файла с кодом.

5. В код класса frmXML включите две подпрограммы.

Private Sub btnNavigateSQL_Click(ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles btnNavigateSQL.Click

 Dim en As New SqlConnection _

("data source=localhost;initial catalog=pubs;user id=sa")

 Dim da As New SqlDataAdapter("Select * from authors", cn)

 Dim ds As New DataSet

 ' Вставка в объект DataSet данных из реляционной базы данных

 da.Fill(ds, "authors")

 ' Создание объекта XmlDataDocument на основе существующего

 ' объекта DataSet.

 Dim xmlDoc As New Xml.XmlDataDocument(ds)

 ' Получение объекта-навигатора из XmlDataDocument.

 Dim xmlNav As XPathNavigator = xmlDoc.CreateNavigator

 ' Извлечение всех фамилий авторов из штата Калифорния (СА).

 Dim xIterator As XPathNodeIterator xIterator = _

xmlNav.Select("//authors[state='CA']/au_lname")

 ' Последовательный обход всех выбранных узлов и

 ' отображение фамилий всех авторов.

 Dim str As New System.Text.StringBuilder

 While (xIterator.MoveNext)

str.Append(xIterator.Current.Value & ControlChars.CrLf)

 End While

 MsgBox(str.ToString)

End Sub

Private Sub btnAddRows_Click(ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles btnAddRows.Click

 Dim dsPubs As New DataSet

 ' Считывание XML-данных из файла.

 dsPubs.ReadXml("..\Pubs.xml")

Поделиться:
Популярные книги

Пустоши

Сай Ярослав
1. Медорфенов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Пустоши

Война

Валериев Игорь
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Война

Темный охотник 6

Розальев Андрей
6. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный охотник 6

Камень Книга седьмая

Минин Станислав
7. Камень
Фантастика:
фэнтези
боевая фантастика
6.22
рейтинг книги
Камень Книга седьмая

Камень. Книга восьмая

Минин Станислав
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
Камень. Книга восьмая

Большие дела

Ромов Дмитрий
7. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Большие дела

Адъютант

Демиров Леонид
2. Мания крафта
Фантастика:
фэнтези
6.43
рейтинг книги
Адъютант

Внешники

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Внешники

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Я – Орк. Том 6

Лисицин Евгений
6. Я — Орк
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 6

Менталист. Революция

Еслер Андрей
3. Выиграть у времени
Фантастика:
боевая фантастика
5.48
рейтинг книги
Менталист. Революция

Титан империи 2

Артемов Александр Александрович
2. Титан Империи
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Титан империи 2

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10