Novità di SQLXML 4.0 SP1
In Microsoft SQLXML 4.0 SP1 sono inclusi diversi aggiornamenti e miglioramenti. In questo argomento viene fornito un riepilogo degli aggiornamenti e vengono riportati i collegamenti a informazioni più dettagliate, se disponibili. In SQLXML 4.0 SP1 sono stati apportati ulteriori miglioramenti per supportare i nuovi tipi di dati presenti in SQL Server 2008. Vengono inoltre presentati gli argomenti seguenti:
Installazione di SQLXML 4.0 SP1
Problemi di installazione affiancata
SQLXML 4.0 e MSXML
Ridistribuzione di SQLXML 4.0
Supporto per SQL Server Native Client
Supporto per i tipi di dati introdotti in SQL Server 2005
Modifiche al caricamento bulk XML per SQLXML 4.0
Modifiche alle chiavi del Registro di sistema per SQLXML 4.0
Problemi di migrazione
Installazione di SQLXML 4.0 SP1
Prima di SQL Server 2008, SQLXML 4.0 veniva rilasciato con SQL Server e apparteneva all'installazione predefinita di tutte le versioni di SQL Server, ad eccezione di SQL Server Express. A partire da SQL Server 2008, la versione più recente di SQLXML (SQLXML 4.0 SP1) non è più inclusa in SQL Server. Per installare SQLXML 4.0 SP1 quando è disponibile, scaricarlo dalla pagina Install Location for SQLXML SP1.
I file di SQLXML 4.0 SP1 vengono installati nel percorso seguente:
%PROGRAMFILES%\SQLXML 4.0\
[!NOTA]
Tutte le impostazioni del Registro di sistema appropriate per SQLXML 4.0 vengono definite durante il processo di installazione.
Per consentire l'esecuzione delle applicazioni SQLXML a 32 bit in sistemi operativi WOW64 (Windows on Windows) a 64 bit, eseguire il pacchetto SQLXML 4.0 SP1 a 64 bit, denominato sqlxml4.msi, disponibile nell'Area download Microsoft.
Disinstallazione di SQLXML 4.0 SP1
In SQLXML 3.0 SP3, SQLXML 4.0 e SQLXML 4.0 SP1 sono presenti chiavi del Registro di sistema condivise. Se le versioni più recenti di SQLXML vengono disinstallate dallo stesso computer in cui è presente SQLXML 3.0 SP3, potrebbe essere necessario reinstallare quest'ultimo.
Problemi di installazione affiancata
Il processo di installazione di SQLXML 4.0 non determina la rimozione dei file installati da versioni precedenti di SQLXML. È pertanto possibile che in un computer siano presenti le DLL relative a installazioni di diverse versioni di SQLXML. È possibile eseguire installazioni affiancate. In SQLXML 4.0 sono inclusi sia i PROGID dipendenti sia quelli indipendenti dalla versione. Per tutte le applicazioni di produzione è consigliabile utilizzare i PROGID dipendenti dalla versione.
SQLXML 4.0 SP1 e MSXML
SQLXML 4.0 non prevede l'installazione di MSXML, ma l'utilizzo di MSXML 6.0, che viene installato insieme a SQL Server 2005 o SQL Server 2008.
Ridistribuzione di SQLXML 4.0 SP1
Per distribuire SQLXML 4.0 SP1, utilizzare il pacchetto del programma di installazione ridistribuibile. Un modo per installare più pacchetti in un'installazione che all'utente può sembrare singola consiste nell'utilizzare la tecnologia del chainer e del programma di avvio automatico. Per ulteriori informazioni, vedere Authoring a Custom Bootstrapper Package for Visual Studio 2005 e Aggiunta di prerequisiti personalizzati.
Se l'applicazione è destinata a una piattaforma diversa da quella su cui è stata sviluppata, è possibile scaricare versioni di sqlncli.msi per x64, Itanium e x86 dall'Area download Microsoft.
Sono anche disponibili programmi di installazione di ridistribuzione separati per MSXML 6.0 (msxml6.msi). Tali programmi sono disponibili nel CD di installazione di SQL Server nel percorso seguente:
%CD%\Setup\
Questi file di installazione possono essere utilizzati per installare MSXML 6.0 direttamente dal CD. Possono inoltre essere utilizzati per ridistribuire liberamente MSXML 6.0 con SQLXML 4.0 SP1 con applicazioni personalizzate.
È inoltre necessario ridistribuire SQL Server Native Client se viene utilizzato come provider di dati con l'applicazione. Per ulteriori informazioni, vedere Installazione di SQL Server Native Client.
Supporto per SQL Server Native Client
SQLXML 4.0 supporta sia il provider SQLOLEDB che il provider SQL Server Native Client. È consigliabile utilizzare la stessa versione del provider SQL Server Native Client e di SQL Server poiché SQL Server Native Client è stato sviluppato per supportare tutti i nuovi tipi di dati disponibili nel server, ad esempio Date, Time, DateTime2 e dateTimeOffset in e supportati da SQL Server 2008 Native Client.
SQL Server Native Client è una tecnologia di accesso ai dati introdotta in SQL Server 2005. Questa tecnologia integra il provider SQLOLEDB e il driver SQLODBC in un'unica libreria a collegamento dinamico (DLL) nativa, offrendo contemporaneamente nuove funzionalità diverse da Microsoft Data Access Components (MDAC).
SQL Server Native Cliente può essere utilizzato per creare nuove applicazioni o migliorare quelle esistenti che richiedono l'utilizzo delle funzionalità introdotte in SQL Server e non supportate da SQLOLEDB e SQLODBC in MDAC e Microsoft Windows. SQL Server Native Client è ad esempio necessario per consentire a funzionalità SQLXML sul lato client, come FOR XML, di utilizzare il tipo di dati xml. Per ulteriori informazioni, vedere Formattazione XML sul lato client (SQLXML 4.0), Utilizzo di ADO per eseguire query SQLXML 4.0 e Programmazione di SQL Server 2008 Native Client.
[!NOTA]
SQLXML 4.0 non è completamente compatibile con la versione precedente SQLXML 3.0. A causa di alcune correzioni di errori e di altre modifiche funzionali, in modo specifico la rimozione del supporto ISAPI SQLXML, non è possibile utilizzare le directory virtuali IIS con SQLXML 4.0. Anche se la maggior parte delle applicazioni viene eseguita con modifiche minori, è necessario testare le applicazioni prima di metterle in produzione con SQLXML 4.0.
Supporto per i tipi di dati introdotti in SQL Server 2005 e SQL Server 2008
Con SQL Server 2005 è stato introdotto il tipo di dati xml, supportato da SQLXML 4.0. Per ulteriori informazioni, vedere Supporto del tipo di dati xml in SQLXML 4.0
Per esempi relativi all'utilizzo del tipo di dati xml in SQLXML in caso di mapping di viste XML, di caricamento bulk XML o di esecuzione di updategram XML, fare riferimento agli esempi forniti negli argomenti seguenti.
In SQL Server 2008 sono stati introdotti i tipi di dati Date, Time, DateTime2 e DateTimeOffset. I quattro nuovi tipi di dati vengono abilitati come tipi scalari predefiniti quando SQLXML 4.0 SP1 viene utilizzato con il provider OLE DB di SQL Server 2008 Native Client 10.0 (SQLNCLI10), fornito con SQL Server 2008.
Modifiche al caricamento bulk XML per SQLXML 4.0 SP1
Per SQLXML 4.0 il campo di overflow SchemaGen viene creato utilizzando il tipo di dati xml. Per ulteriori informazioni, vedere Modello di oggetti per il caricamento bulk XML di SQL Server (SQLXML 4.0).
Se sono state precedentemente create applicazioni Microsoft Visual Basic e si desidera utilizzare SQLXML 4.0, è necessario ricompilarle con il riferimento a Xblkld4.dll.
Per le applicazioni Visual Basic, Scripting Edition è necessario registrare la DLL da utilizzare. Nell'esempio seguente, se si specificano PROGID indipendenti dalla versione, l'applicazione dipende dall'ultima DLL registrata:
set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")
[!NOTA]
Il PROGID dipendente dalla versione è SQLXMLBulkLoad.SQLXMLBulkLoad.4.0.
Modifiche alle chiavi del Registro di sistema per SQLXML 4.0
In SQLXML 4.0 le chiavi del Registro di sistema sono state sostituite rispetto alle versioni precedenti dalle chiavi seguenti.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\TemplateCacheSize
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\SchemaCacheSize
Se si desidera rendere effettive tali chiavi per SQLXML 4.0, è necessario modificare le impostazioni.
Con SQLXML 4.0 vengono inoltre introdotte le chiavi del Registro di sistema seguenti:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\ReportErrorsWithSQLInfo
Per impostazione predefinita, SQLXML 4.0 restituisce informazioni sugli errori nativi fornite da OLE DB e SQL Server, anziché un errore SQLXML di livello elevato (come nel caso delle versioni precedenti di SQLXML). Per evitare questo comportamento, il valore di questa chiave del Registro di sistema di tipo DWORD deve essere impostato su 0 (l'impostazione predefinita è 1).
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\FORXML_GenerateGUIDBraces
Per impostazione predefinita, SQLXML restituisce i valori GUID di SQL Server senza racchiuderli fra parentesi graffe. Per consentire che il valore GUID venga restituito tra parentesi graffe, ad esempio {GUID}, il valore di questa chiave del Registro di sistema deve essere impostato su 1 (l'impostazione predefinita è 0).
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\SQL2000CompatMode
Per impostazione predefinita, quando il parser XML carica i dati, gli spazi vuoti vengono normalizzati in base alle regole di XML 1.0. In questo modo vengono persi alcuni degli spazi vuoti nei dati. La rappresentazione testuale dei dati potrebbe pertanto non essere uguale dopo l'analisi, anche se i dati rimarranno invariati dal punto di vista semantico.
Questa chiave viene introdotta in modo che sia possibile scegliere di mantenere gli spazi vuoti nei dati. Se si aggiunge tale chiave del Registro di sistema e se ne imposta il valore su 0, gli spazi vuoti (LF, CR e TAB) nei dati XML vengono restituiti codificati nel caso di valori di attributi. Nel caso di valori di elementi, solo il carattere CR viene restituito codificato.
Esempio:
CREATE TABLE T( Col1 int, Col2 nvarchar(100)) GO -- Insert data with tab, line feed and carriage return). INSERT INTO T VALUES (1, 'This is a tab . This is a line feed and CR more text') GO -- Test this query (without the registry key). SELECT * FROM T FOR XML AUTO -- This is the result (no encoding of special characters). <?xml version="1.0" encoding="utf-8" ?> <r> <T Col1="1" Col2="This is a tab . This is a line feed and CR more text"/> </r> -- Now add registry key with value 0 and execute the query again. -- Note the encoding for carriage return, line-feed and tab in the attribute value. <?xml version="1.0" encoding="utf-8" ?> <r> <T Col1="1" Col2="This is a tab 	. This is a line feed and CR 
 more text"/> </r> -- Update the query and specify ELEMENTS directive SELECT * FROM T FOR XML AUTO, ELEMENTS -- Only the carriage return is returned encoded. <?xml version="1.0" encoding="utf-8" ?> <r> <T> <Col1>1</Col1> <Col2>This is a tab . This is a line feed and CR 
 more text</Col2> </T> </r>
Problemi di migrazione
Di seguito vengono riportati i problemi che potrebbero avere un impatto sulla migrazione delle applicazioni SQLXML legacy a SQLXML 4.0.
Query ADO e SQLXML 4.0
Nelle versioni precedenti di SQLXML viene fornito il supporto per l'esecuzione di query basate sull'URL mediante le directory virtuali IIS e il filtro ISAPI SQLXML. Per le applicazioni che utilizzano SQLXML 4.0 questo supporto non è più disponibile.
Gli updategram, i modelli e le query SQLXML possono invece essere eseguiti utilizzando le estensioni SQLXML di ActiveX Data Objects (ADO), introdotte per la prima volta con Microsoft Data Access Components (MDAC) 2.6 e versioni successive.
Per ulteriori informazioni, vedere Utilizzo di ADO per eseguire query SQLXML 4.0.
Supporto per ISAPI SQLXML 3.0 e per i tipi di dati introdotti in SQL Server 2005
Poiché il supporto ISAPI è stato rimosso da SQLXML 4.0, se la soluzione richiede le funzionalità relative ai tipi di dati migliorate introdotte in SQL Server 2005, come il tipo di dati xml o i tipi di dati definiti dall'utente (UDT) e l'accesso basato sul Web, sarà necessario utilizzare un'altra soluzione, ad esempio classi gestite SQLXML, o un altro tipo di gestore HTTP, come i servizi Web XML nativi in SQL Server 2005.
In alternativa, se non sono richieste tali estensioni del tipo, è possibile continuare a utilizzare SQLXML 3.0 per connettersi alle installazioni di SQL Server 2005 e SQL Server 2008. Il supporto ISAPI SQLXML 3.0 funziona con le versioni più recenti, ma non supporta o riconosce il tipo di dati xml o i tipi definiti dall'utente introdotti in SQL Server 2005.
Modifiche alla protezione del caricamento bulk XML per i file temporanei
Per SQLXML 4.0 e SQL Server 2005 o SQL Server 2008 le autorizzazioni per i file del caricamento bulk XML vengono concesse all'utente che esegue l'operazione di caricamento bulk. Le autorizzazioni di lettura e scrittura vengono ereditate dal file system. Nelle versioni precedenti di SQLXML e SQL Server, il caricamento bulk XML in SQLXML crea file temporanei non protetti che potrebbero essere letti da chiunque.
Problemi di migrazione per FOR XML sul lato client
A causa delle modifiche apportate al motore di esecuzione, è possibile che SQL Server 2005 e SQL Server 2008 restituiscano nei metadati valori diversi per una tabella di base rispetto a quelli restituiti nel caso dell'esecuzione della query FOR XML con SQL Server 2000. In questi casi, la formattazione sul lato client dei risultati della query FOR XML presenterà un output differente, a seconda della versione sulla quale viene eseguita la query.
Se una query FOR XML viene eseguita sul lato client utilizzando SQLXML 3.0 su una colonna con tipo di dati xml, i dati dei risultati verranno restituiti sotto forma di stringa sostituita completamente da entità. In SQLXML 4.0, se SQL Server Native Client (SQLNCLI10) viene specificato come provider, i dati verranno restituiti come XML.