Через ADO.NET нельзя получить доступ к таким сервисным провайдерам, как SQLXMLOLEDB, поэтому комплект SQLXML 3.0 содержит сборку Microsoft.Data.SqlXml. В нее входят следующие классы:
- SqlXmlCommand – позволяет сохранять результаты в поток, а также предоставляет доступ к специальным свойствам.
- SqlXmlParameter – представляет собой параметр запроса.
- SqlXmlAdapter – позволяет заполнить DataSet с помощью SqlXmlCommand.
Самый богатый свойствами и методами класс – SqlXmlCommand, с помощью которого можно выполнять запросы XPath, исполнять шаблоны и выполнять автоматическую трансформацию, причем все это может быть сделано на клиенте.
Свойства класса SqlXmlCommand
- ClientSideXml – если установлен в true, преобразование recordset-а в XML выполняется на клиенте. Подробности в [1].
- SchemaPath – путь до аннотированной схемы, с помощью которой можно выполнять запросы XPath.
- XslPath – Путь до файла XSLT, которая будет автоматически использована после выборки данных (и, если необходимо, преобразования их в XML).
- Namespaces – Задает пространства имен, которые могут понадобиться для исполнения запросов XPath.
- RootTag – Так как результирующий XML-документ не является правильно оформленным вследствие того, что не имеет корневого элемента, непосредственная работа с ним может быть затруднена. Свойство RootTag позволяет задать корневой элемент результирующего документа.
В качестве типа команды можно использовать следующие значения.
|
|
Тип | Описание |
SqlXmlCommandType.Sql | Стандартный код T-SQL. |
SqlXmlCommandType.XPath | Запрос XPath. |
SqlXmlCommandType.Template | Выполнение шаблона. |
SqlXmlCommandType.TemplateFile | Выполнение шаблона, находящегося в файле. |
SqlXmlCommandType.UpdateGram | Выполнение апдейтаграммы. Подробности в [1] |
SqlXmlCommandType.Diffgram | Выполнение дифграммы. |
В форумах по ASP.NET иногда поднимаются вопросы наподобие: «Как наиболее эффективно и просто передать XML-документ пользователю?». Вот пример кода на VB.NET:
Передача XML пользователю с помощью SqlXmlCommand.
Dim cmd as SqlXmlCommandcmd = New SqlXmlCommand("Provider=SQLOLEDB;User ID=user;" _ & "Data Source=server;Password=password;")cmd.CommandText = "select * from [table] for xml auto"cmd.CommandType = SqlXmlCommandType.Sqlcmd.RootTag = "root"Response.Clear()Response.ContentType = "text/xml"cmd.ExecuteToStream(Response.OutputStream)Response.End() |
Помимо метода ExecuteToStream, класс SqlXmlCommand предоставляет другие удобные методы выборки данных:
- ExecuteStream – создает и возвращает новый поток.
- ExecuteXmlReader – создает и возвращает экземпляр класса XmlReader.
Примеры выполнения запросов XPath и шаблонов можно посмотреть в [1]. Более подробную информацию об использовании этих классов можно получить в [4].