Compartilhar via


Formatação XML do lado do cliente (SQLXML 4.0)

Este tópico fornece informações sobre formatação de XML do lado do cliente. A formatação do lado do cliente refere-se à formatação de XML na camada intermediária.

ObservaçãoObservação

Este tópico fornece informações adicionais sobre como usar a cláusula FOR XML no lado do cliente e supõe que você já esteja familiarizado com a cláusula FOR XML. Para obter mais informações sobre FOR XML, consulte Construindo XML com FOR XML.

Importante   Para usar a funcionalidade FOR XML do lado do cliente com o novo tipo de dados xml, os clientes devem sempre usar o provedor de dados do SQL Server Native Client (SQLNCLI10), em vez do provedor SQLOLEDB. SQLNCLI10 é a última versão do provedor do SQL Server e compreende plenamente os tipos de dados introduzidos no SQL Server 2005. O comportamento da cláusula FOR XML do lado do cliente com o provedor SQLOLEDB tratará os tipos de dados xml como cadeias de caracteres.

Formatando documentos XML no lado do cliente

Quando um aplicativo cliente executa a seguinte consulta:

SELECT FirstName, LastName
FROM   Person.Person
FOR XML RAW;

...só esta parte da consulta é enviada ao servidor:

SELECT FirstName, LastName
FROM   Person.Person

O servidor executa a consulta e retorna um conjunto de linhas (que contém as colunas FirstName e LastName) ao cliente. A camada intermediária aplica as informações de FOR XML ao conjunto de linhas e retorna a formatação XML ao cliente.

De maneira similar, quando você executa uma consulta XPath, o servidor retorna o conjunto de linhas ao cliente e a transformação FOR XML EXPLICIT é aplicada ao conjunto de linhas no cliente, gerando a formatação XML desejada.

A tabela a seguir mostra os modos que você pode especificar com a cláusula FOR XML do lado do cliente.

Modo FOR XML do lado do cliente

Comentário

RAW

Gera resultados idênticos quando especificado em FOR XML do lado do cliente ou do lado do servidor.

NESTED

É semelhante ao modo FOR XML AUTO no lado do servidor.

EXPLICIT

É semelhante ao modo FOR XML EXPLICIT do lado do servidor.

ObservaçãoObservação

Se você especificar o modo AUTO e solicitar a formatação XML do lado do cliente, toda a consulta será enviada ao servidor, isto é, a formatação XML ocorrerá no servidor. Isto será feito por conveniência, mas observe que o modo NESTED retorna os nomes das tabelas base como nomes de elemento no documento XML gerado. Alguns dos aplicativos que você grava podem exigir nomes de tabela base. Por exemplo, você pode executar um procedimento armazenado e carregar os dados resultantes em um Dataset (no Microsoft .NET Framework) e gerar posteriormente um DiffGram para atualizar dados nas tabelas. Em tal caso, você precisará das informações da tabela base e precisará usar o modo NESTED.

Benefícios da formatação XML do lado do cliente

A seguir, são descritos alguns benefícios da formatação XML no cliente.

Se você tiver procedimentos armazenados no servidor que retornem um único conjunto de linhas, poderá solicitar que a transformação FOR XML do lado do cliente gere um XML.

Por exemplo, considere o procedimento armazenado a seguir. Esse procedimento retorna os nomes e sobrenomes da tabela Person.Person no banco de dados AdventureWorks2008R2:

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

O exemplo de modelo XML a seguir executa o procedimento armazenado. A cláusula FOR XML é especificada depois do nome de procedimento armazenado.

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

Como o atributo client-side-xml é definido como 1 (true) no modelo, o procedimento armazenado é executado no servidor e o conjunto de linhas de duas colunas retornado pelo servidor é transformado em XML na camada intermediária e retornado ao cliente. (Somente um resultado parcial é mostrado aqui.)

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Person.Person FirstName="Gustavo" LastName="Achong" /> 
  <Person.Person FirstName="Catherine" LastName="Abel" />
</ROOT>
ObservaçãoObservação

Quando estiver usando o Provedor SQLXMLOLEDB ou as Classes Gerenciadas por SQLXML, você poderá usar a propriedade ClientSideXml para solicitar a formatação XML do lado do cliente.

A carga de trabalho é mais equilibrada.

Como o cliente executa a formatação XML, a carga de trabalho é equilibrada entre o servidor e o cliente, liberando o servidor para fazer outras coisas.

Dando suporte à formatação XML do lado do cliente

Para dar suporte à funcionalidade de formatação XML do lado do cliente, o SQLXML fornece:

  • Provedor SQLXMLOLEDB

  • Classes gerenciadas SQLXML

  • Suporte de modelo XML avançado

  • Propriedade SqlXmlCommand.ClientSideXml

    Você pode especificar a formatação do lado do cliente definindo essa propriedade das classes gerenciadas SQLXML como true.

Suporte de modelo XML avançado

A partir do SQL Server 2005, o modelo XML no SQL Server foi aprimorado com a adição do atributo client-side-xml. Se esse atributo for definido como true, XML será formatado no cliente. Observe que esse atributo de modelo é idêntico em funcionalidade à propriedade ClientSideXML específica do Provedor SQLXMLOLEDB.

ObservaçãoObservação

Se você executar um modelo XML em um aplicativo ADO que esteja usando o Provedor SQLXMLOLEDB e especificar tanto o atributo client-side-xml no modelo como a propriedade ClientSideXML do provedor, o valor especificado no modelo terá precedência.