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

Создание объекта XmlReader с помощью объекта Command

Создание объекта XmlReader с помощью объекта Command

В главе 4, "Модель ADO.NET: провайдеры данных", описываются способы работы с объектом Command, который является ключевым объектом — провайдером данных на платформе .NET. В ней рассматриваются способы выполнения команд на основе объектов ExecuteReader, ExecuteScalar и ExecuteNonQuery. Хотя все провайдеры данных на платформе .NET реализуют эти методы, объект SqlCommand имеет дополнительный метод ExecuteXmlReader, который используется для извлечения и доступа к XML-данным из СУБД SQL Server.

Метод ExecuteXmlReader возвращает объект XmlReader точно так же, как он возвращает объект DataReader.

Для демонстрации применения метода ExecuteXmlReader вернитесь к проекту ADO-XML и выполните следующее.

1. Включите в форму frmXML под кнопкой Write XML еще одну кнопку, перетаскивая ее из панели элементов управления.

2. В окне свойств Properties укажите значение btnExecuteXML для свойства (Name) и значение ExecuteXMLReader для свойства Text этой кнопки.

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

Листинг 10.12. Код извлечения и обработки данных из СУБД SQL Server в формате XML

Private Sub btnExecuteXML_Click(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles btnExecuteXML.Click
 Dim cn As New SqlConnection _
  ("data source=localhost;initial catalog=pubs;user>

 Dim cmd As New SqlCommand _
  ("select * from stores for xml auto, elements", en)
 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

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


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