Mise à jour d'une application vers SQL Server 2008 R2 Native Client à partir de SQL Server 2005 Native Client

Cette rubrique décrit les modifications essentielles apportées à SQL Server Native Client depuis SQL Server Native Client dans SQL Server 2005.

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

Modification du comportement dans SQL Server Native Client 10.0

Description

OLE DB effectue un remplissage uniquement à l'échelle définie.

Pour les conversions dans lesquelles les données sont envoyées au serveur, SQL Server Native Client 10.0 remplit les zéros à droite dans les données uniquement jusqu'à la longueur maximale de valeurs datetime. SQL Server Native Client 9.0 et versions antérieures effectuaient un remplissage à neuf chiffres.

Valider DBTYPE_DBTIMESTAMP pour ICommandWithParameter::SetParameterInfo.

SQL Server Native Client 10.0 implémente la spécification OLE DB stipulant que bScale dans ICommandWithParameter::SetParameterInfo doit être défini à la précision de fractions de seconde pour DBTYPE_DBTIMESTAMP.

La procédure stockée sp_columns retourne maintenant "NO" au lieu de "NO " pour la colonne IS_NULLABLE.

Dans SQL Server Native Client 10.0, la procédure stockée sp_columns retourne maintenant "NO" au lieu de "NO " pour une colonne IS_NULLABLE.

SQLSetDescRec, SQLBindParameter et SQLBindCol effectuent maintenant le contrôle de cohérence.

Avant SQL Server Native Client 10.0, le paramètre SQL_DESC_DATA_PTR n'entraînait pas de vérification de cohérence pour les types de descripteurs dans SQLSetDescRec, SQLBindParameter ou SQLBindCol.

SQLCopyDesc effectue maintenant une vérification de la cohérence du descripteur.

Avant SQL Server Native Client 10.0, SQLCopyDesc n'effectuait pas de vérification de cohérence lorsque le champ SQL_DESC_DATA_PTR était défini sur un enregistrement particulier.

SQLGetDescRec n'effectue plus de vérification de cohérence du descripteur.

Avant SQL Server Native Client 10.0, SQLGetDescRec effectuait une vérification de cohérence de descripteur lorsque le champ SQL_DESC_DATA_PTR était défini. Cela n'était pas requis par la spécification ODBC et dans SQL Server Native Client 10.0, cette vérification de cohérence n'est plus effectuée.

Erreur différente retournée lorsque la date est hors limites.

Pour le type datetime, un numéro d'erreur différent est retourné par SQL Server Native Client 10.0 pour une date hors limites.

Plus spécifiquement, SQL Server Native Client 9.0 retournait l'erreur 22007 pour toutes les valeurs d'années hors limites dans les conversions de chaînes vers datetime et SQL Server Native Client 10.0 retourne l'erreur 22008 lorsque la date est comprise dans la plage prise en charge par datetime2 mais en dehors de la plage prise en charge par datetime ou smalldatetime.

La valeur datetime tronque les fractions de seconde et n'arrondit pas si cela entraîne une modification du jour.

Avant SQL Server Native Client 10.0, le comportement client des valeurs datetime envoyées au serveur consistait à les arrondir au 1/300e de seconde. Dans SQL Server Native Client 10.0, ce scénario provoque une troncation des fractions de seconde si l'arrondi modifie le jour.

Troncation possible de secondes pour la valeur datetime.

Une application générée avec SQL Server 2008 Native Client (ou ultérieure) qui se connecte à un serveur SQL Server 2005 (ou antérieur) tronquera des secondes et des fractions de seconde pour la partie heure des données envoyées au serveur si vous créez une liaison avec 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. Dans SQL Server Native Client 10.0, le jour ne change pas (les fractions de seconde sont tronquées et non arrondies).

Modifications de conversion IBCPSession::BCColFmt.

Dans SQL Server Native Client 10.0, lorsque vous utilisez IBCPSession::BCOColFmt pour convertir SQLDATETIME ou SQLDATETIME en un type chaîne, une valeur fractionnaire est exportée. Par exemple, lors de la conversion du type SQLDATETIME vers le type SQLNVARCHARMAX, les versions antérieures de SQL Server Native Client retournaient

1989-02-01 00:00:00. SQL Server Native Client 10.0 retourne 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 limite sql_variant 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 limite sql_variant en tant que type date/heure ne générait pas d'erreur. SQL Server Native Client 10.0 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, les valeurs datetime étaient arrondies selon l'échelle des colonnes datetime et smalldatetime par SQL Server. SQL Server 2008 Native Client (et versions ultérieures) applique maintenant les règles de validation plus strictes définies dans la spécification principale ODBC pour les fractions de seconde. Si une valeur de paramètre ne peut pas être convertie au type SQL à l'aide de l'échelle spécifiée ou impliquée par 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.

Si des modifications sont apportées dans SQL Server 2008, il est possible que dans une application des résultats différents soient retournés par une instruction qui a entraîné l’exécution d'un déclencheur alors que le NOCOUNT OFF était actif. Dans ce cas, votre application peut générer une erreur. Pour corriger cette erreur, définissez le NOCOUNT ON dans le déclencheur ou appelez SQLMoreResults pour passer au résultat suivant.