Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Вебмастеру -> Сеппа Д. -> "Microsoft ADO.NET" -> 203

Microsoft ADO.NET - Сеппа Д.

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 197 198 199 200 201 202 < 203 > 204 205 206 207 208 209 .. 260 >> Следующая

Получение XML-данных из БД SQL Server 2000
Все больше и больше разработчиков хотят обращаться с результатами запросов к БД как с XML-документами. Чтобы предоставить им такую возможность, в SQL Server 2000 реализована поддержка запросов, возвращающих данные в формате 4 ML Можно выбрать данные в объект DataSet ADO.NET и затем средствами объекта ХшЛ>(Ич[>'>шш1')1, обращаться к ним как к N \Ц,-документу, однако нагрузка на систему от таких операций выше, чем от простого получения данных в XML-
формате.
Использование запросов XML
Б SQL Server 2000 реализован необязательный раздел запросов
позволяющий получать результаты запросов в XML-формате. Рассмотрим пару примеров, использующих этот раздел, и обсудим, как загрузить результаты запроса в объект DataSet или XmlDocumettt АЪОЖТ.
Выполнение запроса FOR XML в SQL Server Query Analyzer
Простейший способ выполнить такой запрос и просмотреть его результаты -воспользоваться SQL Server Query Analyzer. Рассмотрим элементарный запрос, возвращающий значения полей CustomerlD и CompanyName первых двух записей таблицы Customers.
SELECT TOP 2 CiistomerlO. CompanyName FROM Customers
Дополним его разделом: " FOR XML AUTO, ELEMENTS"
Блок FOR XML указывает SQL Server вернуть результаты запроса в XML-формате; AUTO — задать эг^жс-ггзм, представляющим записи набора результатов, имя используемой в запросе таблицы: ELEMENTS — сохранить значения отдельных полей в виде элементов. По умолчанию SQL Server возвращает такую информацию в виде атрибутов, а не элементов.
В меню Query выберите команду Results In Text и выполните запрос. Он окажется аналогичным показанному на рис. за исключением того, что на рисунке
я вручную отформатировал данные, чтобы их стало удобнее читать.
Конечно, выборка XML-данных в SQL Server Query Analyzer не очень-то полезна. Посмотрим, как средствами ADO.NET загрузить эти данные в более доступные
объекты.
468
Часть III Автономная работа с данными: объект DataSet модели ado.nw i
SELECT ТОТ Customer ID
FSft SSL AUTO, ELEHEHT-
J
г С ЧЯ г. й г Т В > 1KATR-: l С U 3 С ОВвЛр >
(2 aitectee:
Рис. 12-6. Выполнение запроса FOR XML в SQL Server Query Analyzer
Объект OleDbCommand не предназначен для получения результатов запросов FOR XML, но вы можете воспользоваться объектом SijiCommand. Он относится к поставщику SQL Server Client .NET Data Provider и предоставляет метод Execute-XmlReader, который возвращает объект XmlReader, позволяющий обращаться к результатам запроса.
Загрузка результатов запроса в объект DataSet
Модель ADO.NET упрощает загрузку результатов запроса в объект DataSet. Воспользуйтесь методом iicilu'ii-iJXddSn и загрузите данные из объекта XiulReadei в DataSd. как показано ниже:
Visual Basic .NET
'Добавьте в начало модуля кода слесуйщук,- строку Imports System.Data.SqlClient Imports System.Xml
Dim strConn, strSQL As String
istrConn = "Data Source=( local )\NetSDK; " & _
"Initial Catalog=Northwind:Trusted_Connection=Yes;" strSQL = "SELECT TOP 2 CtistonrerlD, CompanyName FROM Customers 11 &
"FOR XML AUTO, ELEMENTS" Dim cn As New SqlConnection(strConn) ¦on. Open()
Dim As New SqlCommand(strSQL, cn;
iDim rclr As XmlReader = cmd. ExecuteXmlReader
Dim ds As New DataSet{)
ds.ReadXml(rdr, XmlReadMode.Fragment)
rdr.CloseO
cn,Close()
Dim strPathToXml As String = "C:\MyData.XML" ds. WriteXmK strPathToXml) ShowXmlInIE(StrPathToXml)
ГЛАВА 12 Работа о XML-данными 469
Visual С# NET
//Добавьте в начало модуля кода следующую строку using System. Data. SqlClient; using System.Xml;
string strConn, strSQL;
strConn = "Data Source=(local)\\NatSDK;" +
"Initial Catalog=Northwind;Trusted_Connect:ion=Yes;"; StrSQL = "SELECT TOP 2 CustoroerlD, CompanyName FROM Customers " +
"FOR XML AUTO, ELEMENTS"; SqlConnection cn = new SqlConnection(strConn); on,Open{);
SqlCommand find = new SqlCommand(strSOL. cn); Xmlfieader rdr = cud.ExecuteXmlReader(); DataSet ds = new DataSetQ; ds.ReadXml(rdr, XmlReadMode.Fragment);
CloseC); cn.Close();
string strPathToXitl = •C:\\MyDeta.XKL"; ds. WriteXmK strPathToXml); ShowXmllnlE(strPathToXml);
Ры. возможно, злметш;:-!. что при вызове методу hcitaSs-ufauclS)!! в качестве второго параметра передается константа Fragment. Результаты запроса представлены в формате XML, однако не являют собой корректный <well-formed) XML-документ. Еще раз взглянув на рис. вы увидите, что узла верхнего уровня нет. Одно из требований к корректному XML-документу — наличие узла верхнего уровня. Результаты данного запроса считаются XML-фрагментом. Таким образом, в вызове метода КеааХтЫы указали, что информация в объекте XmlReader ~ это XML-фрагмент.
Загрузка результатов запроса в объект XmlDocument
Если бы результаты запроса представляли собой корректный XML-документ, организовать загрузку данных в объект XmlDocument было бы просто. Достаточно вызвать метод XmlDocument Load и передать ему объект XmlReader.
Однако нам приходится дополнить объект XmlDocument узлом верхнего уровня и затем добавлять в этот узел результаты запроса, по одному узлу за раз. как показано далее:
Предыдущая << 1 .. 197 198 199 200 201 202 < 203 > 204 205 206 207 208 209 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100