Лабораторная работа №2




Скачать 82.77 Kb.
НазваниеЛабораторная работа №2
Дата публикации29.07.2013
Размер82.77 Kb.
ТипЛабораторная работа
odtdocs.ru > Медицина > Лабораторная работа

Лабораторная работа № 2



Извлечение данных из базы данных в формате XML и отображение их в браузере
Часть 1. Средства поддержки функциональности XML в SQL Server 2000/2005
В SQL Server 2000/2005 входит ряд средств, поддерживающих функциональность XML. В результате SQL Server 2000/2005 способен исполнять роль сервера баз данных с под­держкой XML. В данной работе рассматриваются два варианта извлечения и записи данных в формате XML:

  1. Извлечение данных XML с помощью оператора SELECT и конструкции FOR XML.

  2. Запись данных XML с помощью компонента доступа к набору строк OPENXML.



  1. ^

    Извлечение данных средствами конструкции FOR XML

    1. Пример



USE Northwind

SELECT Customers.CustomerID, ContactName, CompanyName, Orders.CustomerID, OrderDate

FROM Customers, Orders

WHERE Customers.CustomerID = Orders.CustomerID

AND (Customers.CustomerID = N'ALFKI' ОR Customers.CustomerID = N'XYZAA')

ORDER ВУ Customers.CustomerID

FOR XML AUTO, ELEMENTS

    1. ^

      Синтаксис конструкции FOR XML



FOR XML {RAW | AUTO | EXPLICIT} [, XMLDATА] [, ELEMENTS] [, BINARY BASE64]

    1. Семантика режимов RAW, AUTO, EXPLICIT





  • Режим RAW трансформирует каждую строку результата запроса в элемент XML с иденти­фикaтopoм, соответствующим идентификатору строки. Каждое непустое поле представляется атрибутом элемента XML, имя которого совпадает с именем поля. Для возврата закодированных двоичных данных в формате base64 в запросе следует задать параметр BINARY BASE64. В режиме RAW извлечение двоичных данных вызывает ошибку, если не задан параметр BINARY BASE64. При запросе схемы XML-Data эта схема, объявленная как пространство имен, выво­дится перед данными. В результирующих данных ссылка на пространство имен схемы повторяется для каждого элемента высшего уровня.

  • Режим AUTO возвращает результат в виде вложенных элементов XML. Каждая указанная в конструкции FROM таблица, если хотя бы один ее столбец находится в списке конст­рукции SELECT, представлена в виде элемента XML. Столбцы из списка конструкции SELECT соответствуют атрибутам элемента. Если задан параметр ELEMENTS, то столб­цы таблицы соответствуют подэлементам, а не атрибутам. По умолчанию в режиме AUTO столбцы соответствуют атрибутам XML. Имя таблицы (или псевдоним, если есть) соответствует имени элемента XML. Имя столбца (или псевдоним, если есть) соответствует имени атрибута или несоставному име­ни подэлемента, если в запросе задан параметр ELEMENTS. В основе иерархии (вложенности элементов) результирующего набора лежит порядок таблиц, который определяется столбцами из списка конструкции SELECT, поэтому поря­док задания имен столбцов в конструкции SELECT имеет большое значение. Порядок идентификации и вложенности таблиц определяется последовательностью имен столбцов в списке SELECT. Первая (крайняя слева) таблица формирует элемент высшего уровня результирующего документа XML. Вторая слева таблица, которая опре­деляется столбцами из оператора SELECT, формирует подэлементы элемента высшего уровня и т. д. Если столбец из списка конструкции SELECT находится в таблице, которая уже ука­зывалась в конструкции SELECT (тогда указывался другой ее столбец),. то этот столбец добавляется как атрибут (или как подэлемент, если задан параметр ELEMENTS) уже со­зданного элемента, а не открывает новую иерархию (путем добавления нового подэлемен­та для этой таблицы).

  • В режиме EXPLICIT форма XML-документа, который возвращается в результате исполне­ния запроса, определяется при создании запроса. Запрос составляют так, чтобы дополни­тельная информация о возможных вложенных элементах задавалась явно как часть запро­са. Если установлен режим EXPLICIT, то ответствен­ность за формат ХМL-документа (в случае использования схемы XML-Data) возлагается на пользователя.



    1. ^

      Семантика режимов XMLDATA, ELEMENTS, BINARY BASE64





  • Ключевое слово XMLDATA указывает, что необходимо получить схему XML-Data. Она добавляется в документ как встроенная схема. Основное назначение ключевого слова XMLDATA, заданного в запросе, - получение сведений о типах данных XML, которые можно использовать там, где эти сведения необходимы (например, при обработке числовых вы­ражений). В противном случае все содержимое документа XML считается текстовой стро­кой.

  • Если задан параметр ELEMENTS, то столбцы возвращаются в виде подэлементов. В противном случае они соответствуют атрибутам XML. Этот параметр поддерживается только в режиме AUTO.

  • Если задан параметр BINARY BASE64, то все двоичные данные, которые возвращает запрос, представлены в формате base64. Чтобы получать двоичные данные в режимах RAW и EXPLICIT, необходимо задать этот параметр. В режиме AUTO двоичные данные по умолчанию возвращаются в виде ссылки.



  1. ^

    Доступ к данным XML с помощью функции OPENXML



Функция OPENXML позволяет полу­чить набор строк, сформированный на основе хранящихся в памяти ХМL-документов. Функцию OPENXML используют в любых операторах SELECT и SELECT INTO, где источником может быть таблица, представление или функция OPENROWSET.

Чтобы написать запрос к документу XML с применением функции OPENXML, необходимо­:

  1. вызвать системную хранимую процедуру sp_xml_preparedocument, которая выполняет синтаксический анализ XML- документа и возвращает его описатель;

  2. передать описатель XML- документа функции OPENXML, которая генерирует представление документа в виде набора строк;

  3. вызвать системную хранимую процедуру sp_xml_removedocument, чтобы удалить внутреннее преставление документа (т. е. освободить память).



    1. Пример



-- объявление переменной.

DECLARE @hDoc INT

-- Cинтаксический анализ данных XML.

EXEC sp_xml_preparedocument @hDoc OUTPUT,

N'









No Orders yet!







'

-- Оператор SELECT с функцией OPENXML.

SELECT *

FROM OPENXML(@hDoc, N'/ROOT/Customers/Orders')

WITH (CustomerID NCHAR(5) '../@CustomerID', ContactName NVARCHAR(50) '../@ContactName', ОrdеrDаtе DATETIME '../@OrderDate')
-- Удаление внутреннего представления документа XML.

EXEC sp_xml_removedocument @hDoc

    1. ^

      Синтаксис функции OPENXML



OPENXML(idoc int [in], rowpattern nvarchar [in], [flags byte [in]]) [WITH (ОбъявленuеСхемы | ИмяТаблuцы)]

    1. ^

      Семантика параметров функции OPENXML





  • idoc - описатель внутреннего представления XML-документа.

  • rowpattern - выражение XPath, которое определяет набор уз­лов XML-документа. Каждый определенный этим шаблоном узел соответствует одной строке из набора, генерируемого функцией OPENXML.

  • flagsтип соответствия между столбцами набора cтpок и узлами XML, описанными шаблоном строк.

  • ОбъявлениеСхемысхема набора строк, в которой указывают имена столбцов, их типы данных и сведения об их соответствии элементам XML-документа.

  • ИмяТаблицы – имя существующей таблицы, схема которой используется OPENXML для генерации набора строк.

Если отказываются от использования конструкции WITH, то в этом случае OPENXML возвращает набор строк в формате таблицы срезов. Результат называется таблицей срезов, поскольку при использовании этого формата каждый срез в дереве проанализирован­ного XML-документа соответствует строке набора строк.

  1. ^

    Демонстрационные примеры



Пример 1. Как извлечь данные с помощью конструкции FOR XML.


  1. Откройте Query Analyzer и подключитесь к локальному серверу.

  2. Щелкните на панели инструментов кнопку Execute Mode, а затем - параметр Results In Text. С этим параметром удобнее просматривать результирующий набор.

  3. На панели Editor в окне Query введите следующий код Transact-SQL:


USE Northwind

SELECT CustomerID, ContactName, CompanyName

FROM Customers

WHERE (CustomerID = N'ALFKI' OR CustomerID = N'XYZAA')

ORDER ВУ CustomerID

FOR XML RAW


  1. Исполните оператор Transact-SQL. На вкладке Results панели Results отображается результирующий набор:


XML_F52E2B61-18A1-11d1-B105-00805F49916B

-------------------------------------------------------------------------------------------------------------------------------------------------------------


(1 row(s) affected)


  1. Обратите вни­мание, что он отличается от типичного результирующего набора оператора SELECT без конструкции FOR XML.


Пример 2. Как извлечь данные XML с помощью функции OPENXML.


  1. На панели Editor в окне Query введите следующий код Transact-SQL:


DECLARE @TestDoc INT

EXEC sp_xml_preparedocument @TestDoc OUTPUT,

N'





'

SELECT *

FROM OPENXML (@TestDoc, N'/ROOT/Employees')

WITH (EmpID NCHAR (5) './@EmpID', FirstName VARCHAR (50) './@FirstName', Dept VARCHAR (10) './@Dept')

EXEC sp_xml_removedocument @TestDoc


  1. Исполните все четыре оператора (DECLARE, EXEC sp_xml_preparedocument, SELECT ­и EXEC sp_xml_removedocument). На вкладке Results отобразится результирующий набор:


EmpID FirstName Dept

----- -------------------------------------------------- ----------

1234 Ethan Marketing

1948 Linda Research
(2 row(s) affected)


  1. Закройте Query Analyzer.


^ Пример 3. Как извлечь данные с помощью конструкции FOR XML программным способом.
using System;

using System.Xml;

using System.Data;

using System.Data.SqlClient;
namespace Wrox.Samples.ADONET

{

public class FORXMLExample

{

public static void Main()

{

string cmdText = "SELECT EmployeeID, LastName, FirstName " +

"FROM Employees FOR XML AUTO, Elements";
string connect = "Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI";
// Create SqlConnection

SqlConnection sqlCN = new SqlConnection(connect);

try

{

sqlCN.Open();
// Create SqlCommand

SqlCommand sqlCMD = new SqlCommand(cmdText, sqlCN);
// Execute SqlCommand and load XmlReader

XmlReader xr = sqlCMD.ExecuteXmlReader();

Console.WriteLine("Employee Last Names");

Console.WriteLine("===================");

while (xr.Read())

{

if (xr.Name == "LastName")

Console.WriteLine(xr.ReadElementString());

}

xr.Close();

}

catch (Exception e)

{

Console.WriteLine(e.ToString());

}

finally

{

if (!(sqlCN == null))

{

sqlCN.Close();

}

}

}

}

}

  1. Задание




  1. Из таблиц базы данных, созданной в ЛР № 2, извлечь данные с помощью конструкции FOR XML; проверить все режимы конструкции FOR XML.

  2. Извлечь данные XML с помощью функции OPENXML.

  3. Извлечь данные с помощью конструкции FOR XML в программе на C#.


Примечание. При выполнении лабораторной работы можно руководствоваться примерами из папки Ch20.

Литература





  1. XML для разработчиков-профессионадлов .NET/Динар Дальви и др. – М.: «ЛОРИ», 2003.

Добавить документ в свой блог или на сайт

Похожие:

Отчёт по теме: «Лабораторная работа №1» Амосов Д. В
Лабораторная работа №1. Интегрированная среда разработки Microsoft Visual C++ 2008. Создание простейшего приложения

Лабораторная работа №6 Лабораторная работа №6 Тема: «Java-апплеты»
Лабораторную работу выполнить без использования сред разработки (Intellij idea, Eclipse, NetBeans и др.)

Лабораторная работа №5 Лабораторная работа №5 Тема: «Классы и объекты»
Лабораторную работу выполнить без использования сред разработки (Intellij idea, Eclipse, NetBeans и др.)

Лабораторная работа №4 Лабораторная работа №4 Тема: «Типы данных,...
Лабораторную работу выполнить без использования сред разработки (Intellij idea, Eclipse, NetBeans и др.)

Лабораторная работа №4 Лабораторная работа №4 Тема: «Типы данных, переменные и массивы Java»
Ввести с консоли n целых чисел и поместить их в массив. Найти среди них четные и нечетные числа и вывести их на консоль

Лабораторная работа №3 Численное интегрирование
Данная лабораторная работа посвящена вычислению определенного интеграла различными численными методами. Все они основаны на том,...

Лабораторная работа Самостоятельная работа
Виды учебной работы, включая самостоятельную работу студентов и трудоемкость (в часах)

Лабораторная работа Самостоятельная работа
Виды учебной работы, включая самостоятельную работу студентов и трудоемкость (в часах)

OpenOffice org. Лабораторная работа №2-1 Работа с таблицами
Напечатать таблицу приведённую ниже. Рисунки находятся на сервере, в папке //kvt/image/mendeleev

Календарно-тематическое планирование Предмет Физическая культура Классы
Плановых контрольных работ ( указать виды: диктант, изложение, контрольная работа, лабораторная работа, зачёт, тест)

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
odtdocs.ru
Главная страница