Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de données SQL dans Microsoft Fabric
En utilisant des clauses FOR XML avec des requêtes SQL, vous pouvez récupérer et convertir les résultats des requêtes en tant que données XML. Lorsque vous utilisez des résultats de requête FOR XML dans le code d’application XML, vous pouvez :
Interroger des tables SQL pour des instances de valeurs de Données XML (SQL Server)
Appliquer la TYPE Directive in FOR XML Queries pour renvoyer les résultats des requêtes contenant des données de type texte ou image au format XML
Cet article donne des exemples expliquant ces approches.
Récupération des données FOR XML avec des îlots de données ADO et XML
L’objet Ado Stream ou d’autres objets qui prennent en charge l’interface COM IStream , comme les objets de requête et de réponse Active Server Pages (ASP), peuvent contenir les résultats lorsque vous utilisez des requêtes FOR XML.
Le code ASP suivant, par exemple, montre les résultats d'une requête lancée sur la colonne de type xml Demographics de la table Sales.Store de la base de données AdventureWorks. La requête recherche plus particulièrement la valeur d'instance de cette colonne pour la ligne où CustomerID est égal à 3.
<!-- BeginRecordAndStreamVBS -->
<%@ LANGUAGE = VBScript %>
<!-- % Option Explicit % -->
<!-- 'Request.ServerVariables("SERVER_NAME") & ";" & _ -->
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Developer Studio"/>
<META HTTP-EQUIV="Content-Type" content="text/html"; charset="iso-8859-1">
<TITLE>FOR XML Query Example</TITLE>
<STYLE>
BODY
{
FONT-FAMILY: Tahoma;
FONT-SIZE: 8pt;
OVERFLOW: auto
}
H3
{
FONT-FAMILY: Tahoma;
FONT-SIZE: 8pt;
OVERFLOW: auto
}
</STYLE>
<!-- #include file="adovbs.inc" -->
<%
Response.Write "<H3>Server-side processing</H3>"
Response.Write "Page Generated @ " & Now() & "<BR/>"
Dim adoConn
Set adoConn = Server.CreateObject("ADODB.Connection")
Dim sConn
sConn = "Provider=SQLOLEDB;Data Source=(local);" & _
"Initial Catalog=AdventureWorks;Integrated Security=SSPI;"
Response.write "Connect String = " & sConn & "<BR/>"
adoConn.ConnectionString = sConn
adoConn.CursorLocation = adUseClient
adoConn.Open
Response.write "ADO Version = " & adoConn.Version & "<BR/>"
Response.write "adoConn.State = " & adoConn.State & "<BR/>"
Dim adoCmd
Set adoCmd = Server.CreateObject("ADODB.Command")
Set adoCmd.ActiveConnection = adoConn
Dim sQuery
sQuery = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'><sql:query>SELECT Demographics from Sales.Store WHERE CustomerID = 3 FOR XML AUTO</sql:query></ROOT>"
Response.write "Query String = " & sQuery & "<BR/>"
Dim adoStreamQuery
Set adoStreamQuery = Server.CreateObject("ADODB.Stream")
adoStreamQuery.Open
adoStreamQuery.WriteText sQuery, adWriteChar
adoStreamQuery.Position = 0
adoCmd.CommandStream = adoStreamQuery
adoCmd.Dialect = "{5D531CB2-E6Ed-11D2-B252-00C04F681B71}"
Response.write "Pushing XML to client for processing " & "<BR/>"
adoCmd.Properties("Output Stream") = Response
Response.write "<XML ID='MyDataIsle'>"
adoCmd.Execute , , 1024
Response.write "</XML>"
%>
<SCRIPT language="VBScript" For="window" Event="onload">
Dim xmlDoc
Set xmlDoc = MyDataIsle.XMLDocument
Dim root
Set root = xmlDoc.documentElement.childNodes.Item(0).childNodes.Item(0).childNodes.Item(0)
For each child in root.childNodes
dim OutputXML
OutputXML = document.all("log").innerHTML
document.all("log").innerHTML = OutputXML & "<LI><B>" & child.nodeName & ":</B> " & child.Text & "</LI>"
Next
MsgBox xmlDoc.xml
</SCRIPT>
</HEAD>
<BODY>
<H3>Client-side processing of XML Document MyDataIsle</H3>
<UL id=log>
</UL>
</BODY>
</HTML>
<!-- EndRecordAndStreamVBS -->
Cet exemple de page ASP contient le code VBScript côté serveur qui utilise ADO pour exécuter la requête FOR XML et renvoyer les résultats XML dans l'îlot de données XML MyDataIsle. Le navigateur reçoit ensuite cet îlot de données XML pour un traitement côté client supplémentaire. Un code VBScript côté client supplémentaire traite ensuite le contenu de l’île de données XML, affichant le contenu dans le cadre du DHTML résultant et ouvrant une boîte de message pour afficher le contenu prétraité de l’île de données XML.
Testez cet exemple
Vérifiez que IIS et l’exemple de base de données AdventureWorks pour SQL Server sont installés.
Cet exemple nécessite Internet Information Services (IIS) version 5.0 ou ultérieure avec la prise en charge d’ASP activée. L’exemple de base de données AdventureWorks doit également être installé.
Copiez l’exemple de code précédent et collez-le dans l’éditeur de texte ou XML que vous utilisez. Enregistrez le fichier en tant que RetrieveResults.asp dans le répertoire racine utilisé par IIS. En règle générale, ce répertoire est C :Inetpub\wwwroot.
Ouvrez la page ASP dans une fenêtre du navigateur en utilisant l'URL qui suit. Premièrement, remplacez « MyServer » par « localhost » ou par le nom réel du serveur sur lequel résident SQL Server et les services Internet (IIS).
https://MyServer/RetrieveResults.asp
La page HTML générée qui en résulte et qui apparaît ressemblera à l'exemple de sortie suivant :
Traitement côté serveur
Page Generated @ 3/11/2006 3:36:02 PM
Connect String = Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=AdventureWorks;Integrated Security=SSPI;
ADO Version = 2.8
adoConn.State = 1
Query String = SELECT Demographics from Sales.Store WHERE CustomerID = 3 FOR XML AUTO
Pushing XML to client for processing
Traitement côté client du document XML MyDataIsle
AnnualSales : 15000000
AnnualRevenue : 150000
BankName : Primary International
BusinessType : OS
YearOpened : 1974
Spécialité: Route
SquareFeet : 38000
Marques : 3
Internet: DSL
NumberEmployees : 40
La boîte de message VBScript affichera ensuite le contenu original et non filtré de l'îlot de données XML qui a été renvoyé par les résultats de la requête FOR XML.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Sales.Store>
<Demographics>
<StoreSurvey xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey">
<AnnualSales>1500000</AnnualSales>
<AnnualRevenue>150000</AnnualRevenue>
<BankName>Primary International</BankName>
<BusinessType>OS</BusinessType>
<YearOpened>1974</YearOpened>
<Specialty>Road</Specialty>
<SquareFeet>38000</SquareFeet>
<Brands>3</Brands>
<Internet>DSL</Internet>
<NumberEmployees>40</NumberEmployees>
</StoreSurvey>
</Demographics>
</Sales.Store>
</ROOT>
Récupération des données FOR XML avec ASP.NET et .NET Framework
Comme dans l’exemple précédent, le code ASP.NET suivant montre les résultats de l’interrogation d’une colonne de type de données xml , Données démographiques, dans la table de l’exemple Sales.Store de base de données AdventureWorks. Comme dans l'exemple précédent, la requête recherche plus particulièrement la valeur d'instance de cette colonne pour la ligne où CustomerID est égal à 3.
Dans cet exemple, les API gérées par Microsoft .NET Framework suivantes retournent et affichent les résultats de la requête FOR XML :
SqlConnection ouvre une connexion à SQL Server, en fonction du contenu d’une variable de chaîne de connexion spécifiée.
strConnSqlDataAdapter sert d’adaptateur de données et utilise la connexion SQL et une chaîne de requête SQL spécifiée pour exécuter la requête FOR XML.
Une fois la requête exécutée, la méthode SqlDataAdapter.Fill remplit une instance DataSet ,
MyDataSetavec la sortie de la requête FOR XML.La méthode DataSet.GetXml retourne les résultats de la requête sous forme de chaîne affichée par la page HTML générée par le serveur.
<%@ Page Language="VB" %> <HTML> <HEAD> <TITLE>FOR XML Query Example</TITLE> <STYLE> BODY { FONT-FAMILY: Tahoma; FONT-SIZE: 8pt; OVERFLOW: auto } H3 { FONT-FAMILY: Tahoma; FONT-SIZE: 8pt; OVERFLOW: auto } </STYLE> </HEAD> <BODY> <% Dim s as String s = "<H3>Server-side processing</H3>" & _ "Page Generated @ " & Now() & "<BR/>" Dim SQL As String SQL = "SELECT Demographics from Sales.Store WHERE CustomerID = 3 FOR XML AUTO" Dim strConn As String strConn = "Server=(local);Database=AdventureWorks;Integrated Security=SSPI;" Dim MySqlConn As New Microsoft.Data.SqlClient.SqlConnection(strConn) Dim MySqlAdapter As New Microsoft.Data.SqlClient.SqlDataAdapter(SQL,MySqlConn) Dim MyDataSet As New System.Data.DataSet MySqlConn.Open() s = s & "<P>SqlConnection opened.</P>" MySqlAdapter.Fill(MyDataSet) s = s & "<P>" & MyDataSet.GetXml & "</P>" MySqlConn.Close() s = s & "<P>SqlConnection closed.</P>" Message.InnerHtml=s %> <SPAN id="Message" runat=server /> </BODY> </HTML>
Testez cet exemple
Vérifiez que IIS et l’exemple de base de données AdventureWorks pour SQL Server sont installés.
Cet exemple nécessite Internet Information Services (IIS) version 5.0 ou ultérieure avec la prise en charge de ASP.NET. L’exemple de base de données AdventureWorks doit également être installé.
Copiez le code précédent et collez-le dans l’éditeur xml ou texte que vous utilisez. Enregistrez le fichier en tant que RetrieveResults.aspx dans le répertoire racine utilisé par IIS. En règle générale, ce répertoire est C :Inetpub\wwwroot.
Ouvrez la page ASP.NET dans une fenêtre de navigateur à l’aide de l’URL suivante. Premièrement, remplacez « MyServer » par « localhost » ou par le nom réel du serveur sur lequel résident SQL Server et les services Internet (IIS).
https://MyServer/RetrieveResults.aspx
La page HTML générée qui en résulte et qui apparaît ressemblera à l'exemple de sortie suivant :
Traitement côté serveur
Page Generated @ 3/11/2006 3:36:02 PM
SqlConnection opened.
<Sales.Store><Demographics><StoreSurvey xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey"><AnnualSales>1500000</AnnualSales><AnnualRevenue>150000</AnnualRevenue><BankName>Primary International</BankName><BusinessType>OS</BusinessType><YearOpened>1974</YearOpened><Specialty>Road</Specialty><SquareFeet>38000</SquareFeet><Brands>3</Brands><Internet>DSL</Internet><NumberEmployees>40</NumberEmployees></StoreSurvey></Demographics></Sales.Store>
SqlConnection closed.
Remarque
La prise en charge du type de données XML SQL Server vous permet de demander qu’une requête FOR XML retourne des résultats en tant que type de données XML , au lieu de chaîne ou de données typées d’images, en spécifiant la directive TYPE. Lorsque vous utilisez la directive TYPE dans les requêtes FOR XML, elle fournit un accès programmatique aux résultats FOR XML similaires à l’approche indiquée dans Utiliser des données XML dans les applications.