Поделиться через


Использование вложенных запросов FOR XML в ASP.NET

В данном примере приложение ASP.NET возвращает браузеру XML-данные, выполняя хранимую процедуру SQL Server. Эта хранимая процедура формирует XML при помощи вложенных запросов. Похожая инструкция SELECT представлена в разделе Формирование одноуровневых элементов с помощью вложенного запроса в режиме AUTO. Данный пример демонстрирует способ применения вложенных запросов FOR XML для формирования элементного XML в SQL Server.

Пример

USE AdventureWorks2008R2;
GO
CREATE PROC Sales.GetSalesOrderInfo AS
SET NOCOUNT ON;
SELECT 
      (SELECT TOP 2 SalesOrderID, SalesPersonID, CustomerID,
         (SELECT TOP 3 SalesOrderID, ProductID, OrderQty, UnitPrice
           FROM Sales.SalesOrderDetail
            WHERE  SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID
            FOR XML AUTO, TYPE)
      FROM  Sales.SalesOrderHeader
        WHERE SalesOrderHeader.SalesOrderID = SalesOrder.SalesOrderID
      for xml auto, type),
      (SELECT * 
         FROM  (SELECT SalesPerson.BusinessEntityID AS SalesPerson, Employee.BusinessEntityID
              FROM Sales.SalesPerson, HumanResources.Employee
              WHERE SalesPerson.BusinessEntityID = Employee.BusinessEntityID) As SalesPerson
         WHERE  SalesPerson.BusinessEntityID = SalesOrder.SalesPersonID
         FOR XML AUTO, TYPE, ELEMENTS)
FROM (SELECT SalesOrderHeader.SalesOrderID, SalesOrderHeader.SalesPersonID
      FROM Sales.SalesOrderHeader, Sales.SalesPerson
      WHERE SalesOrderHeader.SalesPersonID = SalesPerson.BusinessEntityID
     ) AS SalesOrder
ORDER BY SalesOrder.SalesOrderID
FOR XML AUTO, TYPE
GO

Это приложение ASPX. Оно выполняет хранимую процедуру и возвращает XML в браузер:

<%@LANGUAGE=C# Debug=true %>
<%@import Namespace="System.Xml"%>
<%@import namespace="System.Data.SqlClient" %><%
Response.Expires = -1;
Response.ContentType = "text/xml";
%>

<%
using(System.Data.SqlClient.SqlConnection c = new System.Data.SqlClient.SqlConnection("Data Source=server;Database=AdventureWorks2008R2;Integrated Security=SSPI;"))
using(System.Data.SqlClient.SqlCommand cmd = c.CreateCommand())
{
   cmd.CommandText = "Sales.GetSalesOrderInfo";
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Connection.Open();
   System.Xml.XmlReader r = cmd.ExecuteXmlReader();
   System.Xml.XmlTextWriter w = new System.Xml.XmlTextWriter(Response.Output);
   w.WriteStartElement("Root");
   r.MoveToContent();
   while(! r.EOF)
   {
      w.WriteNode(r, true);
   }
   w.WriteEndElement();
   w.Flush();
}
%>

Тестирование приложения

  1. Создайте хранимую процедуру в базе данных База данных AdventureWorks2008R2.

  2. Сохраните приложение .aspx в каталоге c:\inetpub\wwwroot (GetSalesOrderInfo.aspx).

  3. Выполните приложение (https://server/GetSalesOrderInfo.aspx).

См. также

Справочник