Mise à jour d'une application depuis SQL Server 2005 Native ClientUpdating an Application from SQL Server 2005 Native Client

Cette rubrique s’applique à : OuiSQL ServerOuibase de données SQL AzureOuiAzure SQL Data Warehouse Oui Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Cette rubrique décrit les modifications essentielles apportées à SQL ServerSQL Server Native Client depuis SQL ServerSQL Server Native Client dans SQL Server 2005SQL Server 2005.This topic discusses the breaking changes in SQL ServerSQL Server Native Client since SQL ServerSQL Server Native Client in SQL Server 2005SQL Server 2005.

Lorsque vous effectuez une mise à niveau de MDAC (Microsoft Data Access Components) vers SQL ServerSQL Server Native Client, vous pouvez constater également des différences de comportement.When you upgrade from Microsoft Data Access Components (MDAC) to SQL ServerSQL Server Native Client, you might also see some behavior differences. Pour plus d’informations, consultez mise à jour d’une Application vers SQL Server Native Client à partir de MDAC.For more information, see Updating an Application to SQL Server Native Client from MDAC.

SQL ServerSQL ServerNative Client 9.0 livré avec SQL Server 2005SQL Server 2005. Native Client 9.0 shipped with SQL Server 2005SQL Server 2005. SQL ServerSQL ServerNative Client 10.0 livré avec SQL Server 2008SQL Server 2008. Native Client 10.0 shipped with SQL Server 2008SQL Server 2008. SQL ServerSQL Server Native Client 10.5 livré avec SQL Server 2008 R2SQL Server 2008 R2. Native Client 10.5 shipped with SQL Server 2008 R2SQL Server 2008 R2. SQL ServerSQL Server Native Client 11.0 livré avec SQL Server 2012SQL Server 2012 et SQL Server 2014SQL Server 2014. Native Client 11.0 shipped with SQL Server 2012SQL Server 2012 and SQL Server 2014SQL Server 2014.

Modification du comportement dans SQL Server Native Client depuis SQL Server 2005SQL Server 2005Changed behavior in SQL Server Native Client Since SQL Server 2005SQL Server 2005 DescriptionDescription
OLE DB effectue un remplissage uniquement à l'échelle définie.OLE DB pads only to the defined scale. Pour les conversions où les données sont envoyées au serveur, SQL ServerSQL Server Native Client (à compter de SQL Server 2008SQL Server 2008) remplit les zéros dans les données uniquement jusqu'à la longueur maximale de datetime valeurs.For conversions where converted data is sent to the server, SQL ServerSQL Server Native Client (beginning in SQL Server 2008SQL Server 2008) pads trailing zeros in data only up to the maximum length of datetime values. SQL Server Native Client 9.0 effectuaient un remplissage à neuf chiffres.SQL Server Native Client 9.0 padded to 9 digits.
Valider DBTYPE_DBTIMESTAMP pour ICommandWithParameter::SetParameterInfo.Validate DBTYPE_DBTIMESTAMP for ICommandWithParameter::SetParameterInfo. SQL ServerSQL ServerNative Client (à compter de SQL Server 2008SQL Server 2008) implémente la spécification OLE DB pour bScale dans ICommandWithParameter::SetParameterInfo à définir à la précision de la fractions pour DBTYPE_DBTIMESTAMP. Native Client (beginning in SQL Server 2008SQL Server 2008) implements the OLE DB requirement for bScale in ICommandWithParameter::SetParameterInfo to be set to the fractional seconds' precision for DBTYPE_DBTIMESTAMP.
Le sp_columns procédure stockée maintenant renvoie « Non » au lieu de « Non » pour la colonne IS_NULLABLE.The sp_columns stored procedure now returns "NO" instead of "NO " for the IS_NULLABLE column. À compter de SQL ServerSQL Server Native Client 10.0 ( SQL Server 2008SQL Server 2008), sp_columns procédure stockée maintenant renvoie « Non » au lieu de « Non » pour une colonne IS_NULLABLE.Beginning in SQL ServerSQL Server Native Client 10.0 ( SQL Server 2008SQL Server 2008), sp_columns stored procedure now returns "NO" instead of "NO " for an IS_NULLABLE column.
SQLSetDescRec et SQLBindParameter SQLBindCol désormais effectuent une vérification de cohérence.SQLSetDescRec, SQLBindParameter, and SQLBindCol now perform consistency checking. Antérieures à SQL ServerSQL Server Native Client 10.0, paramètre SQL_DESC_DATA_PTR n’a pas provoqué une vérification de cohérence pour les types de descripteurs dans SQLBindCol, SQLBindParameter ou SQLSetDescRec.Prior to SQL ServerSQL Server Native Client 10.0, setting SQL_DESC_DATA_PTR did not cause a consistency check for any descriptor type in SQLSetDescRec, SQLBindParameter, or SQLBindCol.
SQLCopyDesc effectue désormais la vérification de cohérence de descripteur.SQLCopyDesc now does descriptor consistency checking. Antérieures à SQL ServerSQL Server Native Client 10.0, SQLCopyDesc n’avez pas une vérification de cohérence lorsque le champ SQL_DESC_DATA_PTR était défini sur un enregistrement particulier.Prior to SQL ServerSQL Server Native Client 10.0, SQLCopyDesc did not do a consistency check when the SQL_DESC_DATA_PTR field was set on a particular record.
SQLGetDescRec n’est plus n’une descripteur une vérification de cohérence.SQLGetDescRec no longer does a descriptor consistency check. Antérieures à SQL ServerSQL Server Native Client 10.0, SQLGetDescRec effectuée une vérification de cohérence de descripteur lorsque le champ SQL_DESC_DATA_PTR était défini.Prior to SQL ServerSQL Server Native Client 10.0, SQLGetDescRec performed a descriptor consistency check when the SQL_DESC_DATA_PTR field was set. Cela n'était pas requis par la spécification ODBC et dans SQL ServerSQL Server Native Client 10.0 ( SQL Server 2008SQL Server 2008) et les versions ultérieures, cette vérification de cohérence n'est plus effectuée.This was not required by the ODBC specification and in SQL ServerSQL Server Native Client 10.0 ( SQL Server 2008SQL Server 2008) and later versions, this consistency check is no longer performed.
Erreur différente retournée lorsque la date est hors limites.Different error returned when date is out of range. Pour le datetime type, un numéro d’erreur différent est retourné par SQL ServerSQL Server Native Client (à compter de SQL Server 2008SQL Server 2008) pour un out-of-range date a été retournée dans les versions antérieures.For the datetime type, a different error number will be returned by SQL ServerSQL Server Native Client (beginning in SQL Server 2008SQL Server 2008) for an out-of-range date than was returned in earlier versions.

Plus précisément, SQL ServerSQL Server Native Client 9.0 retournait l’erreur 22007 pour toutes les valeurs hors limites année des conversions de chaîne pour datetime, et SQL ServerSQL Server début Native Client avec la version 10.0 ( SQL Server 2008SQL Server 2008) retourne l’erreur 22008 lorsque la date dans la plage prise en charge par datetime2 mais en dehors de la plage prise en charge par datetime ou smalldatetime.Specifically, SQL ServerSQL Server Native Client 9.0 returned 22007 for all out of range year values in string conversions to datetime, and SQL ServerSQL Server Native Client beginning with version 10.0 ( SQL Server 2008SQL Server 2008) returns 22008 when the date is within the range supported by datetime2 but outside the range supported by datetime or smalldatetime.
DateTime valeur tronque les fractions de secondes et le pas round if arrondi modifie le jour.datetime value truncates fractional seconds and not round if rounding will change the day. Antérieures à SQL ServerSQL Server Native Client 10.0, le comportement client datetime valeurs envoyées au serveur consiste à les arrondir au 1/300e de seconde.Prior to SQL ServerSQL Server Native Client 10.0, the client behavior for datetime values sent to the server is to round them to nearest 1/300th of a second. Depuis SQL ServerSQL Server Native Client 10.0, ce scénario provoque une troncation des fractions de seconde si l'arrondi modifie le jour.Beginning in SQL ServerSQL Server Native Client 10.0, this scenario causes a truncation of fractional seconds if rounding changes the day.
Trunction possible de secondes pour datetime valeur.Possible trunction of seconds for datetime value. Une application générée avec SQL Server 2008SQL Server 2008 Native Client (ou ultérieure) qui se connecte à un serveur SQL ServerSQL Server 2005 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.An application built with SQL Server 2008SQL Server 2008 Native Client (or later) that connects to a SQL ServerSQL Server 2005 server will truncate seconds and fractional seconds for time portion of data sent to the server if you bind to a datetime column with a type identifier of DBTYPE_DBTIMESTAMP (OLE DB) or SQL_TIMESTAMP (ODBC) and a scale of 0.

Exemple :For example:

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

Données insérées : 1994-08-21 21:21:00.000Inserted data: 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.OLE DB data conversion from DBTYPE_DBTIME to DBTYPE_DATE no longer can cause the day to change. Avant SQL ServerSQL 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.Prior to SQL ServerSQL Server Native Client 10.0, if the time part of a DBTYPE_DATE was within a half second of midnight, OLE DB conversion code caused the day to change. Depuis SQL ServerSQL Server Native Client 10.0, le jour ne change pas (les fractions de seconde sont tronquées et non arrondies).Beginning in SQL ServerSQL Server Native Client 10.0, the day will not change (fractional seconds are truncated and not rounded).
Modifications de conversion IBCPSession::BCColFmt.IBCPSession::BCColFmt conversion changes. À compter de SQL ServerSQL 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.Beginning in SQL ServerSQL Server Native Client 10.0, when you use IBCPSession::BCOColFmt to convert SQLDATETIME or SQLDATETIME to a string type, a fractional value is exported. Par exemple, lors de la conversion du type SQLDATETIME vers le type SQLNVARCHARMAX, les versions antérieures de SQL ServerSQL Server Native Client retournaientFor example, when converting type SQLDATETIME to type SQLNVARCHARMAX, earlier versions of SQL ServerSQL Server Native Client returned

1989-02-01 00:00:00.1989-02-01 00:00:00. SQL ServerSQL Server Native Client 10.0 et versions ultérieures retournent 1989-02-01 00:00:00.0000000. Native Client 10.0 and later versions return 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.Size of data sent must match length specified in 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.When using SQL_LEN_DATA_AT_EXEC, the size of the data must match the length that you specified with 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.You can use SQL_DATA_AT_EXEC but there are potential performance benefits to using SQL_LEN_DATA_AT_EXEC.
Les applications personnalisées qui utilisent l'API BCP peuvent maintenant afficher un avertissement.Custom applications that use the BCP API can now see a warning. 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.The BCP API will generate a warning message if data length is greater than the specified length for a field for all types. Auparavant, cet avertissement était affiché uniquement pour les types caractère, et non pour tous les types.Previously, this warning was only given for character types, but will not be issued for all types.
Insertion d’une chaîne vide dans un sql_variant liés comme un type date/heure génère une erreur.Inserting an empty string into a sql_variant bound as a date/time type generates an error. Dans SQL ServerSQL Server Native Client 9.0, insertion d’une chaîne vide dans un sql_variant liés comme un type date/heure n’a pas généré une erreur.In SQL ServerSQL Server Native Client 9.0, inserting an empty string into a sql_variant bound as a date/time type did not generate an error. SQL ServerSQL Server Native Client 10.0 (et versions ultérieures) génère correctement une erreur dans cette situation. Native Client 10.0 (and later) correctly generates an error in this situation.
Validation des paramètres _TIMESTAMP SQL_C_TYPE et DBTYPE_DBTIMESTAMP plus stricte.Stricter SQL_C_TYPE _TIMESTAMP and DBTYPE_DBTIMESTAMP parameter validation. Antérieures à SQL Server 2008SQL Server 2008 Native Client, datetime valeurs étaient arrondies selon l’échelle de datetime et smalldatetime les colonnes par SQL ServerSQL Server.Prior to SQL Server 2008SQL Server 2008 Native Client, datetime values were rounded to fit the scale of datetime and smalldatetime columns by SQL ServerSQL Server. SQL Server 2008SQL 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. Native Client (and later) applies the stricter validation rules that are defined in the ODBC core specification for fractional seconds. 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.If a parameter value cannot be converted to the SQL type by using the scale specified or implied by the client binding without truncation of trailing digits, an error is returned.
SQL ServerSQL Server peut retourner des résultats différents lorsque le déclencheur s’exécute. might return different results when a trigger runs. Modifications introduites dans SQL Server 2008SQL Server 2008 peut entraîner une application des résultats différents soient retournés par une instruction qui a provoqué un déclencheur à exécuter quand NOCOUNT OFF était en vigueur.Changes introduced in SQL Server 2008SQL Server 2008 might cause an application to have different results returned from a statement that caused a trigger to run when NOCOUNT OFF was in effect. Dans ce cas, votre application peut générer une erreur.In this situation, your application might generate an error. Pour résoudre cette erreur, définissez NOCOUNT ON dans le déclencheur ou appelez SQLMoreResults à passer au résultat suivant.To resolve this error, set NOCOUNT ON in the trigger or call SQLMoreResults to advance to the next result.

Voir aussiSee Also

Programmation de SQL Server Native ClientSQL Server Native Client Programming