Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Banco de dados SQL no Microsoft Fabric
Usando cláusulas FOR XML com consultas SQL, você pode recuperar e converter resultados de consulta como dados XML. Ao usar os resultados da consulta FOR XML no código do aplicativo XML, você pode:
Consultar tabelas SQL para instâncias de valores de Dados XML (SQL Server)
Aplicar a TYPE Directive in FOR XML Queries para retornar o resultado de consultas que contêm dados de tipo texto ou imagem como XML.
Este artigo fornece exemplos que demonstram essas abordagens.
Recuperar dados FOR XML com ADO (ActiveX Data Objects) e ilhas de dados XML
O objeto ADO Stream ou outros objetos que dão suporte à interface COM IStream , como os objetos solicitação e resposta do ASP (Active Server Pages), podem conter os resultados quando você está trabalhando com consultas FOR XML.
Por exemplo, o código ASP a seguir mostra os resultados de consulta a uma coluna de tipo de dados xml, Demographics, na tabela Sales.Store do banco de dados de exemplo do AdventureWorks. Especificamente, a consulta procura pelo valor da instância dessa coluna para a linha em que CustomerID é igual a 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 -->
Essa página ASP de exemplo contém VBScript do lado do servidor que usa ADO para executar a consulta FOR XML e retorna os resultados XML em uma ilha de dados XML, MyDataIsle. Em seguida, o navegador recebe essa ilha de dados XML para processamento adicional do lado do cliente. Código VBScript adicional do lado do cliente processa o conteúdo da ilha de dados XML, exibindo o conteúdo como parte do DHTML resultante e abrindo uma caixa de mensagem para mostrar o conteúdo pré-processado da ilha de dados XML.
Testar este exemplo
Verifique se o IIS e o banco de dados de exemplo AdventureWorks para SQL Server estão instalados.
Este exemplo requer o IIS (Serviços de Informações da Internet) versão 5.0 ou posterior com o suporte do ASP habilitado. O banco de dados de exemplo AdventureWorks também deve ser instalado.
Copie o exemplo de código anterior e cole-o no XML ou editor de texto que você usa. Salve o arquivo como RetrieveResults.asp no diretório raiz que o IIS usa. Normalmente, esse diretório é C:Inetpub\wwwroot.
Abra a página ASP em uma janela do navegador usando a seguinte URL. Primeiro, substitua “MyServer” por “localhost” ou pelo nome real do servidor onde o SQL Server e o IIS estão instalados.
https://MyServer/RetrieveResults.asp
Os resultados apresentados da página HTML gerada serão semelhantes à seguinte saída de exemplo:
Processamento no lado do servidor
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
Processamento do lado do cliente do documento XML MyDataIsle
AnnualSales: 1500000
AnnualRevenue: 150000
BankName: Primário Internacional
BusinessType: SISTEMA OPERACIONAL
YearOpened: 1974
Especialidade: Rodovia
SquareFeet: 38000
Marcas: 3
Internet: DSL
NumberEmployees: 40
Em seguida, a caixa de mensagem do VBScript exibirá o seguinte conteúdo das ilhas de dados XML originais, não filtradas, que foram retornadas pelos resultados da consulta 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>
Recuperar dados FOR XML com o ASP.NET e o .NET Framework
Como no exemplo anterior, o código ASP.NET a seguir mostra os resultados da consulta de uma coluna de tipo de dados xml , Demographics, na Sales.Store tabela do banco de dados de exemplo AdventureWorks. Como no exemplo anterior, a consulta procura o valor da instância dessa coluna para a linha em que o CustomerID é igual a 3.
Neste exemplo, as seguintes APIs gerenciadas pelo Microsoft .NET Framework retornam e renderizam os resultados da consulta FOR XML:
O SqlConnection abre uma conexão com o SQL Server, com base no conteúdo de uma variável
strConnde cadeia de conexão especificada.SqlDataAdapter serve como o adaptador de dados e usa a conexão SQL e uma cadeia de caracteres de consulta SQL especificada para executar a consulta FOR XML.
Após a execução da consulta, o método SqlDataAdapter.Fill preenche uma instância do DataSet ,
MyDataSetcom a saída da consulta FOR XML.O método DataSet.GetXml retorna os resultados da consulta como uma cadeia de caracteres que a página HTML gerada pelo servidor exibe.
<%@ 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>
Testar este exemplo
Verifique se o IIS e o banco de dados de exemplo AdventureWorks para SQL Server estão instalados.
Este exemplo requer o IIS (Serviços de Informações da Internet) versão 5.0 ou posterior com ASP.NET suporte habilitado. O banco de dados de exemplo AdventureWorks também deve ser instalado.
Copie o código anterior e cole-o no XML ou editor de texto que você usa. Salve o arquivo como RetrieveResults.aspx no diretório raiz que o IIS usa. Normalmente, esse diretório é C:Inetpub\wwwroot.
Abra a página ASP.NET em uma janela do navegador usando a URL a seguir. Primeiro, substitua “MyServer” por “localhost” ou pelo nome real do servidor onde o SQL Server e o IIS estão instalados.
https://MyServer/RetrieveResults.aspx
Os resultados apresentados da página HTML gerada serão semelhantes à seguinte saída de exemplo:
Processamento no lado do servidor
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.
Observação
O suporte ao tipo de dados xml do SQL Server permite solicitar que uma consulta FOR XML retorne resultados como tipo de dados xml , em vez de como dados digitado por cadeia de caracteres ou imagem, especificando a diretiva TYPE. Quando você usa a diretiva TYPE em consultas FOR XML, ela fornece acesso programático aos resultados FOR XML semelhantes à abordagem mostrada em Usar Dados XML em Aplicativos.