XML-данные в SQL Server 2000 (ADO.NET)
Обновлен: November 2007
Microsoft SQL Server 2000 предоставляет поддержку функциональных возможностей XML при получении данных. Для обеспечения возможности возврата XML-потока напрямую из SQL Server 2000 в объекте SqlCommand поставщика данных .NET Framework для SQL Server предусмотрен метод ExecuteXmlReader. Метод ExecuteXmlReader возвращает объект System.Xml.XmlReader, заполненный результатами выполнения инструкции SQL, которая задана для SqlCommand. Дополнительные сведения о XmlReader см. в разделе Класс XmlReader. Метод ExecuteXmlReader может использоваться только с инструкцией, возвращающей результаты в виде XML-данных, такой как инструкции SQL Server 2000, включающие предложение FOR XML, как показано в следующем примере.
Dim command As SqlCommand = New SqlCommand( _
"SELECT * FROM Customers FOR XML AUTO, ELEMENTS", connection)
Dim reader As System.Xml.XmlReader = command.ExecuteXmlReader()
SqlCommand command = new SqlCommand(
"SELECT * FROM Customers FOR XML AUTO, ELEMENTS", connection);
System.Xml.XmlReader reader = command.ExecuteXmlReader();
Набор данных DataSet может также использоваться для записи реляционных данных в виде XML, кроме того, синхронизируется с XmlDataDocument для обеспечения реляционного и иерархического представления отдельного набора данных в памяти в реальном времени. Дополнительные сведения см. в разделах Заполнение DataSet из DataAdapter (ADO.NET) и Использование XML в DataSet (ADO.NET).
Если нет необходимости создавать реляционное представление данных в памяти с помощью набора данных DataSet, то для получения XML-данных, особенно больших объемов, хорошо подходит метод ExecuteXmlReader. Метод ExecuteXmlReader представляет собой реализацию потокового API-интерфейса, поэтому не требует получения и кэширования всех данные до их предоставления вызывающему объекту, как было бы в случае использования DataSet для преобразования реляционных данных в XML.
Закрытие XmlReader
После завершения использования объекта XmlReader следует всегда вызывать метод Close. До тех пор пока объект XmlReader остается открытым, объект Connection используется исключительно объектом XmlReader. Пока XmlReader не закрыт, нельзя будет выполнять команды для Connection, включая создание еще одного объекта XmlReader или DataReader.