Nouveautés de SQLXML 4.0 SP1

Microsoft SQLXML 4.0 SP1 inclut différentes mises à jour et améliorations. Cette rubrique résume les mises à jour et fournit, le cas échéant, des liens vers des pages contenant des informations plus détaillées. SQLXML 4.0 SP1 fournit des améliorations supplémentaires pour prendre en charge les nouveaux types de données présentés dans SQL Server 2008. Cette rubrique traite des sujets suivants :

  • Installation de SQLXML 4.0 SP1

  • Problèmes liés à l'installation côte à côte

  • SQLXML 4.0 et MSXML

  • Redistribution de SQLXML 4.0

  • Prise en charge de SQL Server Native Client

  • Prise en charge des types de données introduits dans SQL Server 2005

  • Modifications apportées au chargement en masse XML pour SQLXML 4.0

  • Modifications apportées aux clés de Registre pour SQLXML 4.0

  • Problèmes de migration

Installation de SQLXML 4.0 SP1

Avant SQL Server 2008, SQLXML 4.0 était fourni avec SQL Server et faisait partie de l'installation par défaut de toutes les versions de SQL Server, à l'exception de SQL Server Express. À partir de SQL Server 2008, la dernière version de SQLXML (SQLXML 4.0 SP1) n'est plus incluse dans SQL Server. Pour installer SQLXML 4.0 SP1, téléchargez-le à partir de l'emplacement d'installation de SQLXML 4.0 SP1 (en anglais).

Les fichiers SQLXML 4.0 SP1 sont installés à l'emplacement suivant :

%PROGRAMFILES%\SQLXML 4.0\

[!REMARQUE]

Tous les paramètres du Registre appropriés pour SQLXML 4.0 sont définis dans le cadre de la procédure d'installation.

Pour permettre l'exécution des applications SQLXML 32 bits sous WOW64 (Windows on Windows64) sur les systèmes d'exploitation Windows 64 bits, exécutez le package SQLXML 4.0 SP1 64 bits, nommé sqlxml4.msi, qui se trouve sur le Centre de téléchargement.

Désinstallation de SQLXML 4.0 SP1

Il existe des clés de Registre partagées entre SQLXML 3.0 SP3, SQLXML 4.0 et SQLXML 4.0 SP1. Si les versions ultérieures de SQLXML sont désinstallées sur le même ordinateur qui contient SQLXML 3.0 SP3, il est possible que vous deviez réinstaller SQLXML 3.0 SP3.

Problèmes liés à l'installation côte à côte

La procédure d'installation de SQLXML 4.0 ne supprime pas les fichiers installés par les versions antérieures de SQLXML. Par conséquent, les DLL de différentes installations de SQLXML avec des versions distinctes peuvent figurer sur votre ordinateur. Vous pouvez exécuter les installations côte à côte. SQLXML 4.0 inclut des PROGID dépendants et indépendants de la version. Toutes les applications de production doivent utiliser des PROGID dépendants de la version.

SQLXML 4.0 SP1 et MSXML

SQLXML 4.0 n'installe pas MSXML. SQLXML 4.0 utilise MSXML 6.0, qui est installé dans le cadre de l'installation de SQL Server 2005 ou version ultérieure.

Redistribution de SQLXML 4.0 SP1

Vous pouvez distribuer SQLXML 4.0 SP1 en utilisant le package du programme d'installation redistribuable. Une façon d'installer plusieurs packages dans ce qui paraît à l'utilisateur être une installation unique consiste à utiliser la technologie des programmes de chaînage et d'amorçage. Pour plus d'informations, consultez Création d'un package de programme d'amorçage personnalisé pour Visual Studio 2005 et Ajout de composants requis personnalisés.

Si votre application vise une plateforme autre que celle sur laquelle elle a été développée, vous pouvez télécharger les versions de sqlncli.msi pour x64, Itanium et x86 à partir du Centre de téléchargement Microsoft.

Il existe également des programmes d'installation de redistribution séparés pour MSXML 6.0 (msxml6.msi). Ceux-ci se trouvent sur le CD d'installation de SQL Server à l'emplacement suivant :

%CD%\Setup\

Ces fichiers d'installation peuvent être utilisés pour installer MSXML 6.0 directement à partir du CD. Ils peuvent également être utilisés pour redistribuer librement MSXML 6.0 et SQLXML 4.0 SP1 avec vos propres applications personnalisées.

Vous devrez également redistribuer SQL Server Native Client si vous l'utilisez comme fournisseur de données avec votre application. Pour plus d'informations, consultez Installation de SQL Server Native Client.

Prise en charge de SQL Server Native Client

SQLXML 4.0 prend en charge les fournisseurs SQLOLEDB et SQL Server Native Client. Il est recommandé d'utiliser la même version du fournisseur SQL Server Native Client et de SQL Server, car SQL Server Native Client est développé pour prendre en charge tout nouveau type de données fourni avec le serveur, par exemple les types de données Date, Time, DateTime2 et dateTimeOffset dans SQL Server 2008et pris en charge par SQL Server 2012 Native Client.

SQL Server Native Client est une technologie d'accès aux données qui a été introduite dans SQL Server 2005. Elle associe le fournisseur SQLOLEDB et le pilote SQLODBC dans une même bibliothèque de liens dynamiques (DLL), tout en proposant également de nouvelles fonctionnalités distinctes des composants MDAC (Microsoft Data Access Components).

SQL Server Native Client peut être utilisé pour créer des applications ou améliorer des applications existantes qui doivent tirer parti des fonctionnalités introduites dans SQL Server qui ne sont pas prises en charge par SQLOLEDB et SQLODBC dans MDAC et Microsoft Windows. Par exemple, SQL Server Native Client est requis pour que des fonctionnalités SQLXML côté client, telles que FOR XML, puissent utiliser le type de données xml. Pour plus d'informations, consultez Mise en forme XML côté client (SQLXML 4.0), Utilisation d'ADO pour exécuter des requêtes SQLXML 4.0 et Programmation de SQL Server Native Client.

[!REMARQUE]

SQLXML 4.0 n'assure pas une compatibilité descendante complète avec SQLXML 3.0. En raison de quelques résolutions de bogue et d'autres modifications fonctionnelles, en particulier la suppression de la prise en charge de l'interface ISAPI SQLXML, vous ne pouvez pas utiliser de répertoires virtuels IIS avec SQLXML 4.0. Bien que la plupart des applications s'exécutent avec des modifications mineures, vous devez les tester avant de les mettre en production avec SQLXML 4.0.

Prise en charge des types de données introduits dans SQL Server 2005 et SQL Server 2008

SQL Server 2005 a introduit le type de données xml, et SQLXML 4.0 prend en charge le type de données xml. Pour plus d'informations, consultez Prise en charge du type de données xml dans SQLXML 4.0.

Pour obtenir des exemples illustrant l'utilisation du type de données xml dans SQLXML lors du mappage de vues XML, du chargement en masse XML ou de l'exécution de codes de mise à jour XML, consultez les exemples fournis dans les rubriques suivantes.

SQL Server 2008 a introduit les types de données Date, Time, DateTime2 et DateTimeOffset. SQLXML 4.0 SP1 activera ces quatre nouveaux types de données sous la forme de types scalaires intégrés lors d'une utilisation avec le fournisseur OLE DB SQL Server 2012 Native Client (SQLNCLI11), fourni avec SQL Server 2012.

Modifications apportées au chargement en masse XML pour SQLXML 4.0 SP1

  • Pour SQLXML 4.0, le champ de dépassement SchemaGen est créé à l'aide du type de données xml. Pour plus d'informations, consultez Modèle objet de chargement en masse XML de SQL Server.

  • Si vous avez précédemment créé des applications Microsoft Visual Basic et que vous souhaitez utiliser SQLXML 4.0, vous devez recompiler l'application avec une référence à Xblkld4.dll.

  • Pour les applications Visual Basic Scripting Edition, vous devez inscrire la DLL que vous souhaitez utiliser. Dans l'exemple suivant, si vous spécifiez des PROGID indépendants de la version, l'application dépend de la dernière DLL inscrite :

    set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad") 
    

    [!REMARQUE]

    Le PROGID dépendant de la version est SQLXMLBulkLoad.SQLXMLBulkLoad.4.0.

Modifications apportées aux clés de Registre pour SQLXML 4.0

Les clés de Registre ont été modifiées par rapport aux versions précédentes. Dans SQLXML 4.0, elles sont les suivantes :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\TemplateCacheSize

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\SchemaCacheSize

Vous devez modifier les paramètres si vous souhaitez que ces clés soient appliquées pour SQLXML 4.0.

De plus, SQLXML 4.0 introduit les clés de Registre suivantes :

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\ReportErrorsWithSQLInfo

    Par défaut, SQLXML 4.0 retourne des informations d'erreur native fournies par OLE DB et SQL Server au lieu d'une erreur SQLXML de niveau supérieur (comme cela était le cas dans les versions antérieures de SQLXML). Si ce comportement ne vous convient pas, attribuez la valeur 0 à cette clé de Registre de type DWORD (la valeur par défaut est 1).

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\FORXML_GenerateGUIDBraces

    Par défaut, SQLXML retourne des valeurs GUID SQL Server sans accolades de délimitation. Si vous souhaitez que la valeur GUID soit retournée avec des accolades (par exemple, {some GUID}), attribuez la valeur 1 à cette clé de Registre (la valeur par défaut est 0).

  • HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\SQL2000CompatMode

    Par défaut, lorsque l'analyseur XML charge les données, les espaces blancs sont normalisés selon les règles du langage XML 1.0. Cela entraîne la perte de quelques espaces blancs dans vos données. Par conséquent, la représentation textuelle de vos données peut ne pas être la même après l'analyse, bien que les données soient les mêmes sur le plan sémantique.

    Cette clé est introduite pour que vous puissiez conserver les espaces blancs dans les données si vous le souhaitez. Si vous ajoutez cette clé de Registre et que vous lui attribuez la valeur 0, les espaces blancs (saut de ligne, retour chariot et tabulation) dans le code XML sont retournés encodés en cas de valeurs d'attribut. En cas de valeurs d'élément, seul le retour chariot est retourné encodé.

    Exemple :

    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 &#x09;. This is a line feed and CR &#x0D;&#x0A; 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 &#x0D;
     more text</Col2>
       </T>
    </r>
    

Problèmes de migration

Les problèmes suivants peuvent affecter la migration de vos applications SQLXML héritées vers SQLXML 4.0.

Requêtes ADO et SQLXML 4.0

Dans les versions antérieures de SQLXML, l'exécution de requêtes basées sur une URL à l'aide de répertoires virtuels IIS et du filtre ISAPI SQLXML était prise en charge. Pour les applications qui utilisent SQLXML 4.0, cette prise en charge n'est plus offerte.

Au lieu de cela, les requêtes, modèles et codes de mise à jour SQLXML peuvent être exécutées à l'aide des extensions SQLXML aux objets ADO (ActiveX Data Objects) qui ont été introduites pour la première fois dans Microsoft Data Access Components (MDAC) 2.6 et versions ultérieures.

Pour plus d'informations, consultez Utilisation d'ADO pour exécuter des requêtes SQLXML 4.0.

Prise en charge de l'interface ISAPI SQLXML 3.0 et des types de données introduits dans SQL Server 2005

La prise en charge de l'interface ISAPI ayant été supprimée dans SQLXML 4.0, si votre solution nécessite les fonctionnalités améliorées de typage de données introduites dans SQL Server 2005, par exemple le type de données XML ou les types de données définis par l'utilisateur (UDT) et l'accès au Web, vous devez utiliser une autre solution telle que des classes managées SQLXML ou un autre type de gestionnaire HTTP, tel que les services Web XML natifs dans SQL Server 2005.

Si vous n'avez pas besoin de ces extensions de type, vous pouvez continuer d'utiliser SQLXML 3.0 pour vous connecter à des installations SQL Server 2005 et SQL Server 2008. La prise en charge de l'interface ISAPI SQLXML 3.0 fonctionne avec ces versions ultérieures, mais elle ne prend pas en charge et ne reconnaît pas le type de données xml ou le type UDT introduit dans SQL Server 2005.

Modifications apportées à la sécurité du chargement en masse XML pour les fichiers temporaires

Pour SQLXML 4.0 et SQL Server, les autorisations sur les fichiers de chargement en masse XML sont accordées à l'utilisateur qui exécute l'opération de chargement en masse. Les autorisations en lecture et en écriture sont héritées du système de fichiers. Dans les versions précédentes de SQLXML et de SQL Server, le chargement en masse XML sous SQLXML créait des fichiers temporaires qui n'étaient pas sécurisés et qui pouvaient être lus par n'importe qui.

Problèmes de migration pour FOR XML côté client

En raison des modifications apportées au moteur d'exécution, SQL Server peut retourner des valeurs dans les métadonnées pour une table de base différentes de celles retournées par la requête FOR XML exécutée sous SQL Server 2000. Si cela se produit, la mise en forme côté client des résultats de la requête FOR XML aura une sortie différente selon la version sur laquelle la requête est exécutée.

Si une requête FOR XML est exécutée côté client à l'aide de SQLXML 3.0 sur une colonne de type de données xml, les données dans les résultats reviendront sous la forme d'une chaîne entièrement décomposée. Dans SQLXML 4.0, si SQL Server Native Client (SQLNCLI11) est spécifié en tant que fournisseur, les données seront retournées sous forme de données XML.