<Employees FirstName="Janet" LastName="Leverling"/>
...

Как видим, каждая строка представлена отдельным элементом, а все поля в ней—атрибутами. Другая простая опция — FOR XML AUTO, ELEMENTS. Вот пример:

SELECT FirstName, LastName FROM Employees FOR XML AUTO, ELEMENTS

В этом случае данные, которые вы получите, используют отдельные элементы для каждой строки и каждого поля, как показано ниже:

<Employees>
  <FirstName>Nancy</FirstName>
  <LastName>Davolio</LastName>
</Employees>
<Employees>
  <FirstName>Andrew</FirstName>
  <LastName>Fuller</LastName>
</Employees>
<Employees>
  <FirstName>Janet</FirstName>
  <LastName>Leverling</LastName>
</Employees>

Совет. Вы можете также настроить формат во всех подробностях, используя синтаксис FOR XML EXPLICIT. Например, это позволяет вам конвертировать некоторые поля в атрибуты, а другие — в элементы. За более подробной информацией на эту тему обращайтесь к руководству SQL Server Books Online. К сожалению, синтаксис запроса FOR XML специфичен для SQL Server и не поддерживается другими системами баз данных.

Чтобы выполнить XML-запрос, нужно использовать метод SqlCommand.ExecuteXmlReader(). Этот метод возвращает XmlReader с результатами запроса как фрагмент XML. Вы можете пройти по XmlReader, перебирая один узел за другим только в одном направлении, — так же, как вы используете XmlTextReader. Фактически XmlTextReader унаследован от XmlReader.

Рассмотрим пример кода, необходимого для извлечения и отображения списка заказчиков на Web-странице:

// Определить команду.
string customerQuery =
  "SELECT FirstName, LastName FROM Employees FOR XML AUTO, ELEMENTS";
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(customerQuery, con);

// Выполнишь команду.
StringBuilder str = new StringBuilder();
try
{
  con.Open();
  XmlReader reader = cmd.ExecuteXmlReader();
  while (reader.Read())
  {
...

предыдущая    следующая страница    вначало главы    оглавление

569

Hosted by uCoz