Freigeben über


Verwenden geschachtelter FOR XML-Abfragen in ASP.NET

In diesem Beispiel gibt eine ASP.NET-Anwendung XML an einen Browser zurück, indem eine gespeicherte Prozedur in SQL Server ausgeführt wird. Die gespeicherte Prozedur generiert XML mithilfe geschachtelter Abfragen. Eine ähnliche SELECT-Anweisung wird im Thema Geschwister generieren mithilfe einer geschachtelten AUTO-Modus-Abfrage gezeigt. In diesem Beispiel wird eine Möglichkeit veranschaulicht, geschachtelte FOR XML-Abfragen zum Generieren elementorientierter XML-Daten in SQL Server zu verwenden.

Beispiel

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  

Dies ist die .aspx Anwendung. Sie führt die gespeicherte Prozedur aus und gibt XML im Browser zurück:

<%@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();  
}  
%>  
So testen Sie die Anwendung
  1. Erstellen Sie die gespeicherte Prozedur in der AdventureWorks2012-Datenbank .

  2. Speichern Sie die .aspx Anwendung im Verzeichnis "c:\inetpub\wwwroot" (GetSalesOrderInfo.aspx).

  3. Ausführen der Anwendung (https://server/GetSalesOrderInfo.aspx).

Siehe auch

Verwenden von geschachtelten FOR XML-Abfragen