Mise à jour d'une application vers SQL Server Native Client à partir de MDAC

Il existe plusieurs différences entre SQL Server Native Client et MDAC (Microsoft Data Access Components). Notez qu'à compter de Windows Vista, MDAC prend le nom de « Windows DAC » (Windows Data Access Components). Même si ces deux solutions fournissent aux données natives un accès aux bases de données SQL Server, SQL Server Native Client a été spécialement conçu pour exposer les nouvelles fonctionnalités de SQL Server 2005, tout en restant compatible avec les versions antérieures.

Les informations contenues dans cette rubrique permettent de mettre à jour votre application MDAC (ou Windows DAC) pour la rendre conforme à la version de SQL Server Native Client fournie avec SQL Server 2005. Pour vous aider à rendre cette application conforme à la version de SQL Server Native Client fournie avec SQL Server 2008 R2, consultez Mise à jour d'une application vers SQL Server 2008 R2 Native Client à partir de SQL Server 2005 Native Client.

Par ailleurs, bien que MDAC contienne des composants permettant d'utiliser OLE DB, ODBC et des objets ADO (ActiveX Data Object), SQL Server Native Client implémente uniquement OLE DB et ODBC (bien que les objets ADO puissent accéder aux fonctionnalités de SQL Server Native Client).

SQL Server Native Client et MDAC diffèrent également dans les domaines suivants :

  • Les utilisateurs qui utilisent des objets ADO pour accéder à un fournisseur SQL Server Native Client peuvent trouver moins de fonctionnalités de filtrage qu'en accédant à un fournisseur OLE DB SQL.

  • Si une application ADO utilise SQL Server Native Client et qu'elle tente de mettre à jour une colonne calculée, une erreur est signalée. Avec MDAC, la mise à jour était acceptée mais ignorée.

  • SQL Server Native Client est un fichier bibliothèque de liens dynamiques (DLL) autonome unique. Les interfaces exposées publiquement ont été limitées en nombre pour faciliter la distribution et limiter l'exposition de sécurité.

  • Seules les interfaces OLE DB et ODBC sont prises en charge.

  • Le fournisseur OLE DB Native Client SQL Server et les noms de pilote ODBC sont différents de ceux utilisés avec MDAC.

  • Les fonctionnalités accessibles à l'utilisateur fournies par les composants MDAC sont disponibles lorsque vous utilisez SQL Server Native Client. Cela comprend, entre autres, le regroupement de connexions, la prise en charge des objets ADO et la prise en charge du curseur client. Lorsque l'une de ces fonctionnalités est utilisée, SQL Server Native Client fournit uniquement la connectivité de base de données. MDAC fournit des fonctionnalités telles que le suivi, des contrôles de gestion et des compteurs de performance.

  • Les applications peuvent utiliser les services principaux OLE DB avec SQL Server Native Client, mais si elles utilisent le moteur de curseur OLE DB, elles doivent utiliser l'option de compatibilité du type de données pour éviter tout problème pouvant résulter du fait que le moteur de curseur n'a pas connaissance des nouveaux types de données SQL Server 2005.

  • SQL Server Native Client prend en charge l'accès aux bases de données SQL Server précédentes, à compter de SQL Server 7.0.

  • SQL Server Native Client n'offre pas l'intégration XML. SQL Server Native Client prend en charge les requêtes XML SELECT … FOR, mais il ne prend pas en charge d'autres fonctionnalités XML. Toutefois, SQL Server Native Client prend en charge le type de données xml introduit dans SQL Server 2005.

  • SQL Server Native Client prend uniquement en charge la configuration de bibliothèques réseau côté client à l'aide d'attributs de chaîne de connexion. Pour configurer une bibliothèque réseau de manière plus complète, vous devez utiliser le Gestionnaire de configuration SQL Server.

  • SQL Server Native Client n'est pas compatible avec odbcbcp.dll. Les applications qui utilisent les interfaces API ODBC et bcp doivent être reconstruites pour établir un lien vers sqlncli10.lib afin d'utiliser SQL Server Native Client.

  • SQL Server Native Client n'est pas pris en charge à partir du fournisseur Microsoft OLE DB pour ODBC (MSDASQL). Si vous utilisez le pilote MDAC SQLODBC avec MSDASQL ou le pilote MDAC SQLODBC avec ADO, utilisez OLE DB dans SQL Server Native Client.

  • Les chaînes de connexion MDAC autorisent une valeur booléenne (true) pour le mot clé Trusted_Connection. Une chaîne de connexion SQL Server Native Client doit utiliser yes ou no.

  • Des changements mineurs affectent les avertissements et les erreurs. Les avertissements et les erreurs retournées par le serveur conservent désormais la même gravité lorsqu'ils sont passés à SQL Server Native Client. Vous devez vous assurer d'avoir rigoureusement testé votre application si vous comptez sur l'interception d'avertissements et d'erreurs particuliers.

  • SQL Server Native Client effectue une vérification des erreurs plus stricte que MDAC, ce qui signifie que certaines applications qui ne sont pas strictement conformes aux spécifications ODBC et OLE DB peuvent se comporter différemment. Par exemple, contrairement au fournisseur OLE DB SQL Server Native Client, le fournisseur SQLOLEDB n'applique pas la règle selon laquelle les noms de paramètre doivent commencer par « @ »pour les paramètres de résultat.

  • SQL Server Native Client se comporte différemment de MDAC en ce qui concerne les connexions échouées. Par exemple, MDAC retourne des valeurs de propriété mises en cache pour une connexion qui a échoué, alors que SQL Server Native Client signale une erreur à l'application appelante.

  • SQL Server Native Client ne génère pas d'événements Visual Studio Analyzer, mais il génère à la place des événements de suivi Windows.

  • SQL Server Native Client ne peut pas être utilisé avec perfmon. Perfmon est un outil Windows qui peut être uniquement utilisé avec des noms de source de données (DSN) qui utilisent le pilote MDAC SQLODBC inclus avec Windows.

  • Lorsque SQL Server Native Client est connecté à SQL Server 2005, l'erreur de serveur 16947 est retournée en tant qu'erreur (SQL_ERROR). Cette erreur se produit lorsqu'une mise à jour ou une suppression positionnée ne parvient pas à mettre à jour ou à supprimer une ligne. Avec SQL Server 2000 et versions antérieures, et avec MDAC lors de la connexion à n'importe quelle version de SQL Server, l'erreur de serveur 16947 est retournée en tant qu'avertissement (SQL_SUCCESS_WITH_INFO).

  • SQL Server Native Client implémente l'interface IDBDataSourceAdmin, qui est une interface OLE DB facultative qui n'était pas précédemment implémentée, mais seule la méthode CreateDataSource de cette interface facultative est implémentée. Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

  • Le fournisseur OLE DB SQL Server Native Client retourne des synonymes dans les ensembles de lignes de schéma TABLES et TABLE_INFO, avec la valeur SYNONYM attribuée à TABLE_TYPE.

  • Les valeurs de retour du type de données varchar(max), nvarchar(max), varbinary(max), xml, udt ou de tout autre type d'objet volumineux ne peuvent pas être retournées aux clients dont les versions sont antérieures à SQL Server 2005. Si vous souhaitez utiliser ces types comme valeurs de retour, vous devez utiliser SQL Server Native Client.

  • Contrairement à SQL Server Native Client, MDAC permet l'exécution des instructions suivantes au démarrage de transactions manuelles et implicites. Elles doivent être exécutées en mode de validation automatique.

    • Tous les opérations de texte intégral (DDL d'index et de catalogue)

    • Toutes les opérations de base de données (create database, alter database, drop database)

    • Reconfigure

    • Shutdown

    • Kill

    • Backup

  • Lorsque des applications MDAC se connectent à SQL Server, les types de données introduits dans SQL Server 2005 apparaissent en tant que types de données compatibles avec SQL Server 2000, comme indiqué dans le tableau suivant.

    Type SQL Server 2005

    Type SQL Server 2000

    varchar(max)

    text

    nvarchar(max)

    ntext

    varbinary(max)

    image

    udt

    varbinary

    xml

    ntext

    Ce mappage de type affecte les valeurs retournées pour les métadonnées de colonne. Par exemple, une colonne de texte a une taille maximale de 2 147 483 647, mais ODBC SQL Server Native Client signale la taille maximale de colonnes varchar(max) en tant que SQL_SS_LENGTH_UNLIMITED, et OLE DB SQL Server Native Client signale la taille maximale de colonnes varchar(max) en tant que 2 147 483 647 ou -1 selon la plateforme.

  • SQL Server Native Client autorise l'ambiguïté dans les chaînes de connexion (par exemple, quelques mots clés peuvent être spécifiés plusieurs fois et des mots clés en conflit peuvent être autorisés avec la résolution basée sur la position ou la précédence) pour des raisons de compatibilité descendante. Les versions ultérieures de SQL Server Native Client n'autoriseront peut-être pas l'ambiguïté dans les chaînes de connexion. Lors de la modification d'applications, il est conseillé d'utiliser SQL Server Native Client pour éliminer toute dépendance vis-à-vis de l'ambiguïté de chaîne de connexion.

  • Si vous utilisez un appel ODBC ou OLE DB pour démarrer des transactions, une différence de comportement existe entre SQL Server Native Client et MDAC : les transactions commencent immédiatement avec SQL Server Native Client, tandis qu'elles commencent après le premier accès à la base de données avec MDAC. Ceci peut affecter le comportement de procédures stockées et de lots, SQL Server nécessitant que @@TRANCOUNT soit le même entre le démarrage et la fin de l'exécution d'un lot ou d'une procédure stockée. Pour plus d'informations, consultez Restauration et validation de transactions dans les procédures stockées et les déclencheurs.

  • Avec SQL Server Native Client, ITransactionLocal::BeginTransaction provoque le démarrage immédiat d'une transaction. Avec MDAC le démarrage de transaction est différé jusqu'à ce que l'application exécute une instruction qui requiert une transaction en mode de transaction implicite. Pour plus d'informations, consultez SET IMPLICIT_TRANSACTIONS (Transact-SQL).

  • Vous pouvez rencontrer des erreurs lorsque vous utilisez le pilote de SQL Server Native Client avec System.Data.Odbc pour accéder à un serveur SQL Server qui expose de nouveaux types de données ou fonctionnalités spécifiques à SQL Server. System.Data.Odbc fournit une implémentation ODBC générique et n'expose pas par la suite de fonctionnalités ou d'extensions spécifiques au fournisseur. (Le pilote de SQL Server Native Client est mis à jour pour prendre en charge les fonctionnalités les plus récentes de SQL Server en mode natif.) Pour contourner ce problème, vous pouvez rétablir MDAC ou migrer vers System.Data.SqlClient.

SQL Server Native Client et MDAC prennent en charge l'isolation de la transaction de lecture validée à l'aide de la version de ligne, mais seul SQL Server Native Client prend en charge l'isolation de la transaction d'instantané. (En termes de programmation, l'isolation de la transaction de lecture validée à l'aide de la version de ligne est la même chose que la transaction de lecture validée.) Pour plus d'informations, consultez Choix des niveaux d'isolement selon le versioning de ligne.