Delen via


Client-side XML-opmaak (SQLXML 4.0)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Dit onderwerp biedt informatie over client-side XML-opmaak. Client-side opmaak verwijst naar de opmaak van XML op de middenlaag.

Opmerking

Dit onderwerp biedt aanvullende informatie over het gebruik van de FOR XML-clausule aan de clientzijde, en gaat ervan uit dat je al bekend bent met de FOR XML-clausule. Voor meer informatie over FOR XML, zie Constructing XML Using FOR XML.

SQLNCLI11 was de eerste versie van de SQL Server-provider die volledig begrip had van de datatypes die in SQL Server 2005 (9.x) werden geïntroduceerd. Het gedrag voor clientzijde VOOR XML met de SQLOLEDB-provider behandelt xml-datatypes als strings.

Belangrijk

SQL Server Native Client (SNAC) wordt niet geleverd met:

  • SQL Server 2022 (16.x) en latere versies
  • SQL Server Management Studio 19 en latere versies

De SQL Server Native Client (SQLNCLI of SQLNCLI11) en de verouderde Microsoft OLE DB-provider voor SQL Server (SQLOLEDB) worden niet aanbevolen voor de ontwikkeling van nieuwe toepassingen.

Gebruik een van de volgende stuurprogramma's voor nieuwe projecten:

Voor SQLNCLI die als onderdeel van SQL Server Database Engine (versies 2012 tot en met 2019) wordt geleverd, raadpleegt u deze uitzondering voor de levenscyclus van ondersteuning.

XML-documenten opmaken aan de clientzijde

Wanneer een clientapplicatie de volgende query uitvoert:

SELECT FirstName, LastName  
FROM   Person.Contact  
FOR XML RAW  

... Alleen dit deel van de query wordt naar de server gestuurd:

SELECT FirstName, LastName  
FROM   Person.Contact  

De server voert de query uit en geeft een rijset (die FirstName en LastNamecolumns bevat) terug naar de client. De middenlaag past vervolgens de FOR XML-transformatie toe op de rijset en geeft XML-opmaak terug aan de client.

Evenzo, wanneer je een XPath-query uitvoert, geeft de server de rijset terug aan de client en wordt de FOR XML EXPLICIT-transformatie toegepast op de rijset op de client, waardoor de gewenste XML-opmaak wordt gegenereerd.

De volgende tabel toont de modi die je kunt specificeren met client-side FOR XML.

Client-side FOR XML-modus Comment
RAW Levert identieke resultaten op wanneer gespecificeerd in client- of server-side VOOR XML.
GENESTE Is vergelijkbaar met DE VOOR XML AUTO-modus aan de serverzijde.
UITDRUKKELIJK Is vergelijkbaar met server-side FOR XML EXPLICIT modus.

Opmerking

Als je AUTO-modus specificeert en client-side XML-opmaak aanvraagt, wordt de volledige query naar de server gestuurd; dat wil zeggen, XML-opmaak vindt plaats op de server. Dit gebeurt voor het gemak, maar let op dat de NESTED-modus basistabelnamen teruggeeft als elementnamen in het gegenereerde XML-document. Sommige applicaties die je schrijft kunnen basistabelnamen vereisen. Je kunt bijvoorbeeld een opgeslagen procedure uitvoeren en de resulterende data laden in een Dataset (in het Microsoft .NET Framework), en later een DiffGram genereren om gegevens in de tabellen bij te werken. In zo'n geval heb je de basistabelinformatie nodig en moet je de NESTED-modus gebruiken.

Voordelen van client-side XML-opmaak

Hieronder volgen enkele voordelen van het opmaken van XML op de client.

Als je opgeslagen procedures op de server hebt die één enkele rijset teruggeven, kun je client-side een FOR XML-transformatie aanvragen om een XML te genereren.

Overweeg bijvoorbeeld de volgende opgeslagen procedure. Deze procedure geeft de voor- en achternamen van medewerkers terug uit de Person.Contacttabel in de AdventureWorks-database:

IF EXISTS (SELECT name FROM sysobjects  
   WHERE name = 'GetContacts' AND type = 'P')  
   DROP PROCEDURE GetContacts  
GO  
CREATE PROCEDURE GetContacts  
AS  
    SELECT   FirstName, LastName  
    FROM     Person.Contact  

De volgende voorbeeld XML-sjabloon voert de opgeslagen procedure uit. De FOR XML-clausule wordt gespecificeerd na de naam van de opgeslagen procedure.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <sql:query client-side-xml="1">  
    EXEC GetContacts FOR XML NESTED  
  </sql:query>  
</ROOT>  

Omdat het client-side-xml-attribuut in het sjabloon op 1 (true) is gezet, wordt de opgeslagen procedure op de server uitgevoerd en wordt de tweekolomsrijset die door de server wordt teruggegeven naar XML op het middenniveau en teruggegeven aan de client. (Hier wordt slechts een gedeeltelijk resultaat getoond.)

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact FirstName="Catherine" LastName="Abel" />  
</ROOT>  

Opmerking

Wanneer je de SQLXMLOLEDB Provider of SQLXML Managed Classes gebruikt, kun je de ClientSideXml-eigenschap gebruiken om client-side XML-opmaak aan te vragen.

De werklast is beter verdeeld.

Omdat de client de XML-opmaak doet, wordt de werklast verdeeld tussen server en client, waardoor de server andere taken kan doen.

Ondersteuning van client-side XML-opmaak

Om de client-side XML-opmaakfunctionaliteit te ondersteunen, biedt SQLXML:

  • SQLXMLOLEDB-provider

  • Beheerde SQLXML-klassen

  • Verbeterde ondersteuning voor XML-templates

  • Eigenschap SqlXmlCommand.ClientSideXml

    Je kunt client-side opmaak specificeren door deze eigenschap van de SQLXML beheerde klassen op true te zetten.

Verbeterde ondersteuning voor XML-templates

Vanaf SQL Server 2005 (9.x) is het XML-sjabloon in SQL Server verbeterd met de toevoeging van het client-side-xml-attribuut . Als dit attribuut op true is gezet, wordt XML op de client geformatteerd. Let op dat dit sjabloonattribuut qua functionaliteit identiek is aan de SQLXMLOLEDB Provider-specifieke ClientSideXML-eigenschap.

Opmerking

Als je een XML-sjabloon uitvoert in een ADO-applicatie die de SQLXMLOLEDB Provider gebruikt, en je specificeert zowel het client-side-xml-attribuut in de sjabloon als de provider ClientSideXML-eigenschap, krijgt de waarde die in het sjabloon is gespecificeerd voorrang.

Zie ook

Architectuur van client- en server-side XML-opmaak (SQLXML 4.0)
FOR XML (SQL Server)
FOR XML-beveiligingsoverwegingen (SQLXML 4.0)
xml Data Type ondersteuning in SQLXML 4.0
SQLXML beheerde klassen
Client-side versus server-side XML-opmaak (SQLXML 4.0)
SqlXmlCommand Object (SQLXML beheerde klassen)
XML-gegevens (SQL Server)