Выбрать главу

   <ID>2041</ID>

   <FirstName>Matthew</FirstName>

   <LastName>Haglund</LastName>

   <DepartmentID>3</DepartmentID>

   <Salary>30000</Salary>

  </tblEmployee>

  <tblEmployee>

   <ID>2045</ID>

   <FirstName>Steve</FirstName>

   <LastName>Marshall</LastName>

   <DepartmentID>3</DepartmentID>

   <Salary>42000</Salary>

  </tblEmployee>

  <tblEmployee>

   <ID>2049</ID>

   <FirstName>Joe</FirstName>

   <LastName>Chideya</LastName>

   <DepartmentID>3</DepartmentID>

   <Salary>54000</Salary>

  </tblEmployee>

  <tblEmployee>

   <ID>2053</ID>

   <FirstName>Terri</FirstName>

   <LastName>Woodruff</LastName>

   <DepartmentID>3</DepartmentID>

   <Salary>66000</Salary>

  </tblEmployee>

  <tblEmployee>

   <ID>2057</ID>

   <FirstName>Randy</FirstName>

   <LastName>Nelson</LastName>

   <DepartmentID>3</DepartmentID>

   <Salary>78000</Salary>

  </tblEmployee>

  <tblEmployee>

   <ID>2061</ID>

   <FirstName>Mike</FirstName>

   <LastName>Woodruff</LastName>

   <DepartmentID>3</DepartmentID>

   <Salary>90000</Salary>

  </tblEmployee>

 </tblDepartment>

 <tblDepartment>

  <ID>4</ID>

  <DepartmentName>Marketing</DepartmentName>

  <tblEmployee>

   <ID>2034</ID>

   <FirstName>Eric</FirstName>

   <LastName >Haglund</LastName>

   <DepartmentID>4</DepartmentID>

   <Salary>12000</Salary>

  </tblEmployee>

  <tblEmployee>

   <ID>2038</ID>

   <FirstName>Sorel</FirstName>

   <LastName>Polito</LastName>

   <DepartmentID>4</DepartmentID>

   <Salary>28000</Salary>

  </tblEmployee>

  <tblEmployee>

   <ID>2042</ID>

   <FirstName>Cathy</FirstName>

   <LastName>Vermeren</LastName>

   <DepartmentID>4</DepartmentID>

   <Salary>0</Salary>

  </tblEmployee>

  <tblEmployee>

   <ID>2046</ID>

   <FirstName>Laura</FirstName>

   <LastName>Davidson</LastName>

   <DepartmentID>4</DepartmentID>

   <Salary>60000</Salary>

  </tblEmployee>

  <tblEmployee>

   <ID>2050</ID>

   <FirstName>Katie</FirstName>

   <LastName>Chideya</LastName>

   <DepartmentID>4</DepartmentID>

   <Salary>76000</Salary>

  </tblEmployee>

  <tblEmployee>

   <ID>2054</ID>

   <FirstName>Cathy</FirstName>

   <LastName>Rosenthal</LastName>

   <DepartmentID>4</DepartmentID>

   <Salary>5555</Salary>

  </tblEmployee>

  <tblEmployee>

   <ID>2058</ID>

   <FirstName>Kathleen</FirstName>

   <LastName>Husbands</LastName>

   <DepartmentID>4</DepartmentID>

   <Salary>108000</Salary>

  </tblEmployee>

 </tblDepartment>

</NewDataSet>

Создание объекта 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 id=sa")

 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-элементов.