Delen via


Gebruik geneste FOR XML-queries in ASP.NET

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

In dit voorbeeld retourneert een ASP.NET toepassing XML naar een browser door een opgeslagen procedure uit te voeren in SQL Server. Met de opgeslagen procedure wordt XML gegenereerd met behulp van geneste query's. Een vergelijkbare SELECT-instructie wordt weergegeven in het artikel Het genereren van broers en zussen met behulp van een geneste AUTO-modusquery. In dit voorbeeld ziet u een manier om geneste FOR XML-query's te gebruiken om elementgerichte XML te genereren in SQL Server.

Voorbeeld

CREATE PROC GetSalesOrderInfo AS
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 SalesPersonID, EmployeeID
              FROM Sales.SalesPerson, HumanResources.Employee
              WHERE SalesPerson.SalesPersonID = Employee.EmployeeID) As SalesPerson
         WHERE  SalesPerson.SalesPersonID = SalesOrder.SalesPersonID
       FOR XML AUTO, TYPE, ELEMENTS)
FROM (SELECT SalesOrderHeader.SalesOrderID, SalesOrderHeader.SalesPersonID
      FROM Sales.SalesOrderHeader, Sales.SalesPerson
      WHERE SalesOrderHeader.SalesPersonID = SalesPerson.SalesPersonID
     ) as SalesOrder
ORDER BY SalesOrder.SalesOrderID
FOR XML AUTO, TYPE
GO

Dit is de .aspx-toepassing. De opgeslagen procedure wordt uitgevoerd en XML wordt geretourneerd in de browser:

<%@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=AdventureWorks;Integrated Security=SSPI;"))
using(System.Data.SqlClient.SqlCommand cmd = c.CreateCommand())
{
   cmd.CommandText = "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();
}
%>

De toepassing testen

  1. Maak de opgeslagen procedure in de AdventureWorks2022-database.

  2. Sla de .aspx toepassing op in de map c:\inetpub\wwwroot (GetSalesOrderInfo.aspx).

  3. De toepassing uitvoeren (https://server/GetSalesOrderInfo.aspx).

Zie ook