Condividi tramite


Formattazione XML sul lato client (SQLXML 4.0)

Questo argomento fornisce informazioni sulla formattazione XML sul lato client. Per formattazione sul lato client si intende la formattazione di dati XML nel livello intermedio.

[!NOTA]

In questo argomento vengono fornite informazioni aggiuntive sull'utilizzo della clausola FOR XML sul lato client, con cui si suppone che l'utente disponga già di una certa familiarità. Per ulteriori informazioni su FOR XML, vedere Costruzione di codice XML tramite la clausola FOR XML.

Importante   Per utilizzare la funzionalità FOR XML sul lato client con il nuovo tipo di dati xml, i client devono utilizzare sempre il provider di dati di SQL Server Native Client (SQLNCLI10) anziché il provider SQLOLEDB. SQLNCLI10 rappresenta la versione più recente del provider di SQL Server ed è in grado di riconoscere completamente i tipi di dati introdotti in SQL Server 2005. Il comportamento per FOR XML sul lato client con il provider SQLOLEDB prevede la gestione dei tipi di dati xml come stringhe.

Formattazione di documenti XML sul lato client

Quando un'applicazione client esegue la query

SELECT FirstName, LastName
FROM   Person.Contact
FOR XML RAW

...Solo la parte seguente della query viene inviata al server:

SELECT FirstName, LastName
FROM   Person.Contact

Il server esegue la query e restituisce un set di righe, contenente le colonne FirstName eLastName, al client. Il livello intermedio applica quindi la trasformazione FOR XML al set di righe e restituisce la formattazione XML al client.

Analogamente, quando si esegue una query XPath il server restituisce il set di righe al client e la trasformazione FOR XML EXPLICIT viene applicata al set di righe nel client, generando la formattazione XML desiderata.

Nella tabella seguente vengono illustrate le modalità che è possibile specificare con la clausola FOR XML sul lato client.

Modalità FOR XML sul lato client

Commento

RAW

Produce risultati identici se specificata in FOR XML sul lato client o sul lato server.

NESTED

È simile alla modalità FOR XML AUTO sul lato server.

EXPLICIT

È simile alla modalità FOR XML EXPLICIT sul lato server.

[!NOTA]

Se si specifica la modalità AUTO e si richiede la formattazione XML sul lato client, l'intera query viene inviata al server, ovvero la formattazione XML viene eseguita nel server. Benché ciò avvenga per motivi di praticità, si noti che la modalità NESTED restituisce nomi di tabella di base nel documento XML generato. È possibile che alcune delle applicazioni scritte richiedano nomi di tabella di base. È possibile, ad esempio, eseguire una stored procedure e caricare i dati risultanti in un set di dati (in Microsoft .NET Framework) e quindi generare in seguito un Diffgram per aggiornare i dati nelle tabelle. In tal caso, sarà necessario disporre delle informazioni sulla tabella di base e utilizzare la modalità NESTED.

Vantaggi della formattazione XML sul lato client

Gli elementi seguenti costituiscono alcuni dei vantaggi della formattazione XML nel client.

Se nel server sono disponibili stored procedure che restituiscono un singolo set di righe, è possibile richiedere la trasformazione FOR XML sul lato client per generare un documento XML.

Si consideri, ad esempio, la stored procedure seguente. La procedura restituisce i nomi e i cognomi dei dipendenti inclusi nella tabella Person.Contact del database AdventureWorks.

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

Il modello XML di esempio seguente esegue la stored procedure. La clausola FOR XML viene specificata dopo il nome della stored procedure.

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

Poiché l'attributo client-side-xml è impostato su 1 (true) nel modello, la stored procedure viene eseguita nel server e il set di righe a due colonne restituito dal server viene trasformato in XML nel livello intermedio e quindi restituito al client. Di seguito viene fornito solo un risultato parziale.

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

[!NOTA]

Quando si utilizza il Provider SQLXMLOLEDB o le classi gestite SQLXML, è possibile utilizzare la proprietà ClientSideXml per richiedere formattazione XML sul lato client.

Il carico di lavoro risulta più bilanciato.

Poiché il client esegue la formattazione XML, il carico di lavoro viene bilanciato tra il server e il client, liberando il server per l'esecuzione di altre operazioni.

Supporto della formattazione XML sul lato client

Per supportare la funzionalità di formattazione XML sul lato client, SQLXML fornisce gli elementi seguenti:

  • Provider SQLXMLOLEDB

  • Classi gestite SQLXML

  • Supporto avanzato per modelli XML

  • Proprietà SqlXmlCommand.ClientSideXml

    È possibile specificare formattazione sul lato client impostando su true questa proprietà per le classi gestite SQLXML.

Supporto avanzato per modelli XML

A partire da SQL Server 2005, il modello XML in SQL Server è stato migliorato con l'aggiunta dell'attributo client-side-xml. Se questo attributo è impostato su true, i dati XML vengono formattati nel client. Si noti che questo attributo del modello ha funzionalità identiche alla proprietà ClientSideXML specifica del provider SQLXMLOLEDB.

[!NOTA]

Se si esegue un modello XML in un'applicazione ADO che utilizza il provider SQLXMLOLEDB e si specifica sia l'attributo client-side-xml nel modello sia la proprietà ClientSideXML del provider, il valore specificato nel modello ha la precedenza.