Partager via


Mise à jour d'une application depuis SQL Server 2005 Native Client

Cette rubrique décrit les changements cassants dans SQL Server Native Client depuis SQL Server Native Client dans SQL Server 2005.

Lorsque vous effectuez une mise à niveau de Microsoft Data Access Components (MDAC) vers SQL Server Native Client, vous pouvez également voir des différences de comportement. Pour plus d’informations, consultez Mise à jour d’une application vers SQL Server Native Client à partir de MDAC.

SQL Server Native Client 9.0 fourni avec SQL Server 2005. SQL Server Native Client 10.0 fourni avec SQL Server 2008. SQL Server Native Client 10.5 fourni avec SQL Server 2008 R2. SQL Server Native Client 11.0 fourni avec SQL Server 2012 et SQL Server 2014.

Changement de comportement dans SQL Server Native Client depuis SQL Server 2005 Descriptif
OLE DB effectue un remplissage uniquement à l'échelle définie. Pour les conversions où les données converties sont envoyées au serveur, SQL Server Native Client (à partir de SQL Server 2008) affiche les zéros de fin dans les données uniquement jusqu’à la longueur maximale des datetime valeurs. SQL Server Native Client 9.0 effectuaient un remplissage à neuf chiffres.
Validez DBTYPE_DBTIMESTAMP pour ICommandWithParameter::SetParameterInfo. SQL Server Native Client (à compter de SQL Server 2008) implémente l’exigence OLE DB pour bScale dans ICommandWithParameter ::SetParameterInfo à définir sur la précision des fractions de secondes pour DBTYPE_DBTIMESTAMP.
La sp_columns procédure stockée retourne désormais « NO » au lieu de « NO » pour la colonne IS_NULLABLE. À compter de SQL Server Native Client 10.0 (SQL Server 2008), sp_columns la procédure stockée retourne désormais « NO » au lieu de « NO » pour une colonne IS_NULLABLE.
SQLSetDescRec, SQLBindParameter et SQLBindCol effectuent désormais une vérification de cohérence. Avant SQL Server Native Client 10.0, le paramètre SQL_DESC_DATA_PTR n’a pas généré de vérification de cohérence pour tout type de descripteur dans SQLSetDescRec, SQLBindParameter ou SQLBindCol.
SQLCopyDesc effectue désormais une vérification de cohérence de descripteur. Avant SQL Server Native Client 10.0, SQLCopyDesc n’a pas effectué de vérification de cohérence lorsque le champ SQL_DESC_DATA_PTR a été défini sur un enregistrement particulier.
SQLGetDescRec n’effectue plus de vérification de cohérence de descripteur. Avant SQL Server Native Client 10.0, SQLGetDescRec a effectué une vérification de cohérence de descripteur lorsque le champ SQL_DESC_DATA_PTR a été défini. Cela n’a pas été requis par la spécification ODBC et dans SQL Server Native Client 10.0 (SQL Server 2008) et versions ultérieures, cette vérification de cohérence n’est plus effectuée.
Erreur différente retournée lorsque la date est hors limites. Pour le datetime type, un autre numéro d’erreur est retourné par SQL Server Native Client (à compter de SQL Server 2008) pour une date hors plage que celle retournée dans les versions antérieures.

Plus précisément, SQL Server Native Client 9.0 a retourné 22007 pour toutes les valeurs de l’année hors plage dans les conversions datetimede chaînes en , et SQL Server Native Client commençant par la version 10.0 (SQL Server 2008) retourne 22008 lorsque la date se trouve dans la plage prise en charge par ou en dehors de la plage prise en charge par datetime2datetime ou smalldatetime.
datetime la valeur tronque les fractions de secondes et n’arrondit pas si l’arrondi change le jour. Avant SQL Server Native Client 10.0, le comportement du client pour datetime les valeurs envoyées au serveur consiste à les arrondir au 1/300e le plus proche d’une seconde. À compter de SQL Server Native Client 10.0, ce scénario provoque une troncation de fractions de secondes si l’arrondi change le jour.
Troncation possible de secondes pour datetime la valeur. Une application créée avec SQL Server 2008 Native Client (ou version ultérieure) qui se connecte à un serveur SQL Server 2005 tronque les secondes et les fractions de secondes pour la partie de temps des données envoyées au serveur si vous liez à une colonne datetime avec un identificateur de type de DBTYPE_DBTIMESTAMP (OLE DB) ou SQL_TIMESTAMP (ODBC) et une échelle de 0.

Par exemple:

Données d'entrée : 1994-08-21 21:21:36.000

Données insérées : 1994-08-21 21:21:00.000
La conversion de données OLE DB de DBTYPE_DBTIME vers DBTYPE_DATE ne peut plus provoquer de changement de jour. Avant SQL Server Native Client 10.0, si la partie heure d'un DBTYPE_DATE était à moins d'une demi-seconde de minuit, le code de conversion OLE DB provoquait le changement de jour. À compter de SQL Server Native Client 10.0, le jour ne change pas (les fractions de secondes sont tronquées et non arrondies).
Modifications de conversion IBCPSession::BCColFmt. À compter de SQL Server Native Client 10.0, lorsque vous utilisez IBCPSession ::BCOColFmt pour convertir SQLDATETIME ou SQLDATETIME en type de chaîne, une valeur fractionnaire est exportée. Par exemple, lors de la conversion de type SQLDATETIME en type SQLNVARCHARMAX, versions antérieures de SQL Server Native Client retournées

1989-02-01 00:00:00. SQL Server Native Client 10.0 et versions ultérieures retournent 1989-02-01 00:00:00.0000000.
La taille des données envoyées doit correspondre à la longueur spécifiée dans SQL_LEN_DATA_AT_EXEC. Lors de l'utilisation de SQL_LEN_DATA_AT_EXEC, la taille des données doit correspondre à la longueur que vous avez spécifiée avec SQL_LEN_DATA_AT_EXEC. Vous pouvez utiliser SQL_DATA_AT_EXEC, mais l'utilisation de SQL_LEN_DATA_AT_EXEC présente certains avantages en matière de performances.
Les applications personnalisées qui utilisent l'API BCP peuvent maintenant afficher un avertissement. L'API BCP génère un message d'avertissement si la longueur des données est supérieure à la longueur spécifiée pour un champ pour tous les types. Auparavant, cet avertissement était affiché uniquement pour les types caractère, et non pour tous les types.
L’insertion d’une chaîne vide dans une sql_variant limite en tant que type date/heure génère une erreur. Dans SQL Server Native Client 9.0, l’insertion d’une chaîne vide dans une sql_variant limite en tant que type date/heure n’a pas généré d’erreur. SQL Server Native Client 10.0 (et versions ultérieures) génère correctement une erreur dans cette situation.
Validation des paramètres _TIMESTAMP SQL_C_TYPE et DBTYPE_DBTIMESTAMP plus stricte. Avant SQL Server 2008 Native Client, datetime les valeurs étaient arrondies pour ajuster l’échelle des datetime colonnes par smalldatetime SQL Server. SQL Server 2008 Native Client (et versions ultérieures) applique les règles de validation plus strictes définies dans la spécification de base ODBC pendant des secondes fractionnaires. Si une valeur de paramètre ne peut pas être convertie au type SQL à l'aide de l'échelle spécifiée ou déduite de la liaison de client sans troncation des chiffres de fin, une erreur est retournée.
SQL Server peut retourner des résultats différents lorsque le déclencheur s’exécute. Les modifications introduites dans SQL Server 2008 peuvent entraîner l’exécution d’une application avec des résultats différents retournés par une instruction qui a provoqué l’exécution d’un déclencheur lorsqu’elle NOCOUNT OFF était en vigueur. Dans ce cas, votre application peut générer une erreur. Pour résoudre cette erreur, définissez NOCOUNT ON dans le déclencheur ou appelez SQLMoreResults pour passer au résultat suivant.

Voir aussi

Programmation de SQL Server Native Client