Mise à jour d’une application vers SQL Server Native Client à partir de MDAC
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Important
SQL Server Native Client (SNAC) n’est pas fourni avec :
- 2022 - SQL Server 16 (16.x) et versions ultérieures
- SQL Server Management Studio 19 et versions ultérieures
SQL Server Native Client (SQLNCLI ou SQLNCLI11) et le fournisseur Microsoft OLE DB pour SQL Server (SQLOLEDB) hérité ne sont pas recommandés pour le développement de nouvelles applications.
Pour les nouveaux projets, utilisez l'un des pilotes suivants :
Pour SQLNCLI qui est fourni en tant que composant du moteur de base de données SQL Server (versions 2012 à 2019), consultez cette exception du cycle de vie du support.
Il existe plusieurs différences entre SQL Server Native Client et Microsoft Data Access Components (MDAC ; à compter de Windows Vista, les composants d’accès aux données sont maintenant appelés Composants d’accès aux données Windows ou DAC Windows). Bien que les deux fournissent un accès natif aux bases de données SQL Server, SQL Server Native Client a été spécifiquement conçu pour exposer les nouvelles fonctionnalités de SQL Server 2005 (9.x), tout en maintenant la compatibilité descendante avec les versions antérieures.
Les informations contenues dans cette rubrique permettent de mettre à jour votre application MDAC (ou Windows DAC) pour qu’elle soit actuelle avec la version de SQL Server Native Client incluse dans SQL Server 2005 (9.x). Pour vous aider à rendre cette application actuelle avec la version de SQL Server Native Client fournie dans SQL Server, consultez Mise à jour d’une application à partir de SQL Server 2005 Native Client.
Remarque
SQL Server Native Client a été supprimé de SQL Server 2022 (16.x).
En outre, bien que MDAC contienne des composants pour l’utilisation d’OLE DB, ODBC et ActiveX Data Objects (ADO), SQL Server Native Client implémente uniquement OLE DB et ODBC (bien que ADO puisse accéder aux fonctionnalités de SQL Server Native Client).
SQL Server Native Client et MDAC diffèrent dans les autres domaines suivants :
Les utilisateurs qui utilisent ADO pour accéder à un fournisseur SQL Server Native Client peuvent trouver moins de fonctionnalités de filtrage que lorsqu’ils ont accédé à un fournisseur SQL OLE DB.
Si une application ADO utilise SQL Server Native Client et 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 seul fichier de bibliothèque de liens dynamiques autonome (DLL). 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 SQL Server Native Client et les noms de pilotes ODBC sont différents de ceux utilisés avec MDAC.
Les fonctionnalités accessibles par l’utilisateur fournies par les composants MDAC sont disponibles lors de l’utilisation de 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. Quand 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é de type de données pour éviter les problèmes potentiels susceptibles de survenir, car le moteur de curseur n’a aucune connaissance des nouveaux types de données SQL Server 2005 (9.x).
SQL Server Native Client prend en charge l’accès aux bases de données SQL Server précédentes.
SQL Server Native Client ne contient pas d’intégration XML. SQL Server Native Client prend en charge SELECT ... Les requêtes FOR XML, mais ne prennent 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 (9.x).
SQL Server Native Client prend en charge la configuration des bibliothèques réseau côté client à l’aide uniquement d’attributs 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 des API ODBC et bcp doivent être reconstruites pour établir une liaison avec sqlncli11.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 SQLODBC MDAC avec MSDASQL ou 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. Un chaîne de connexion SQL Server Native Client doit utiliser oui ou non.
Des changements mineurs affectent les avertissements et les erreurs. Les avertissements et les erreurs retournés 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 a un contrôle d’erreur plus strict que MDAC, ce qui signifie que certaines applications qui ne sont pas conformes strictement aux spécifications ODBC et OLE DB peuvent se comporter différemment. Par exemple, le fournisseur SQLOLEDB n’a pas appliqué la règle que les noms de paramètres doivent commencer par « @ » pour les paramètres de résultat, mais le fournisseur OLE DB SQL Server Native Client.
SQL Server Native Client se comporte différemment de MDAC en ce qui concerne les connexions ayant échoué. Par exemple, MDAC retourne des valeurs de propriété mises en cache pour une connexion qui a échoué, tandis 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 génère plutôt 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 (9.x) et versions ultérieures, l’erreur de serveur 16947 est retournée en tant que 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 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’a pas été 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 version future de 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 TABLE_TYPE défini sur SYNONYME.
Les valeurs de retour du type de données varchar(max), nvarchar(max), varbinary(max), xml, udt ou d’autres types d’objets volumineux ne peuvent pas être retournées aux versions clientes antérieures à SQL Server 2005 (9.x). Si vous souhaitez utiliser ces types comme valeurs de retour, vous devez utiliser SQL Server Native Client.
MDAC permet d’exécuter les instructions suivantes au début des transactions manuelles et implicites, mais SQL Server Native Client ne le fait pas. 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)
Reconfigurer
Shutdown
Tuer
Backup
Lorsque des applications MDAC se connectent à SQL Server, les types de données introduits dans SQL Server 2005 (9.x) apparaissent en tant que types de données compatibles avec SQL Server 2000 (8.x), 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 SQL Server Native Client ODBC signale la taille maximale des colonnes varchar(max) en tant que SQL_SS_LENGTH_UNLIMITED, et SQL Server Native Client OLE DB signale la taille maximale des colonnes varchar(max) comme 2 147 483 647 ou -1, selon la plateforme.
SQL Server Native Client autorise l’ambiguïté dans les chaîne de connexion (par exemple, certains mots clés peuvent être spécifiés plusieurs fois et les mots clés en conflit peuvent être autorisés avec la résolution en fonction de la position ou de la priorité) pour des raisons de compatibilité descendante. Les futures versions de SQL Server Native Client peuvent ne pas autoriser l’ambiguïté dans les chaîne de connexion s. Il est recommandé de modifier des applications pour utiliser SQL Server Native Client pour éliminer toute dépendance à chaîne de connexion ambiguïté.
Si vous utilisez un appel ODBC ou OLE DB pour démarrer des transactions, il existe une différence de comportement entre SQL Server Native Client et MDAC ; les transactions commencent immédiatement avec SQL Server Native Client, mais les transactions commencent après le premier accès à la base de données à l’aide de MDAC. Cela peut affecter le comportement de procédures stockées et de lots, car SQL Server exige que @@TRANCOUNT soit identique au démarrage et à la fin de l’exécution d’un lot ou d’une procédure stockée.
Avec SQL Server Native Client, ITransactionLocal ::BeginTransaction entraîne 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 lors de l’utilisation du pilote SQL Server Native Client avec System.Data.Odbc pour accéder à un ordinateur 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 par la suite pas de fonctionnalités ou d’extensions spécifiques au fournisseur. (Le pilote SQL Server Native Client est mis à jour pour prendre en charge en mode natif les dernières fonctionnalités DE SQL Server.) Pour résoudre ce problème, vous pouvez revenir à MDAC ou migrer vers System.Data.SqlClient.
SQL Server Native Client et MDAC prennent en charge l’isolation des transactions validées en lecture à l’aide du contrôle de version de ligne, mais seul SQL Server Native Client prend en charge l’isolation des transactions d’instantané. (En termes de programmation, l'isolation de la transaction de lecture validée à l'aide du contrôle de version de ligne est la même chose que la transaction de lecture validée.)