Freigeben über


Aktualisieren einer Anwendung von SQL Server 2005 Native Client

In diesem Thema werden die grundlegenden Änderungen in SQL Server Native Client seit SQL Server Native Client im SQL Server 2005 erläutert.

Wenn Sie ein Upgrade von Microsoft Data Access Components (MDAC) auf SQL Server Native Client durchführen, sehen Sie möglicherweise auch Einige Verhaltensunterschiede. Weitere Informationen finden Sie unter Aktualisieren einer Anwendung auf SQL Server Native Client von MDAC.

SQL Server Native Client 9.0 wird mit SQL Server 2005 ausgeliefert. SQL Server Native Client 10.0 war im Lieferumfang von SQL Server 2008 enthalten. SQL Server Native Client 10.5 war im Lieferumfang von SQL Server 2008 R2 enthalten. SQL Server Native Client 11.0 wird mit SQL Server 2012 und SQL Server 2014 ausgeliefert.

Verhalten in SQL Server Native Client seit SQL Server 2005 geändert BESCHREIBUNG
OLE DB füllt nur Zahlen bis zur definierten Anzahl von Dezimalstellen auf. Bei Konvertierungen, bei denen konvertierte Daten an den Server gesendet werden, SQL Server Native Client (ab SQL Server 2008) pads nach Nullen in Daten nur bis zur maximalen Länge von datetime Werten. In SQL Server Native Client 9.0 wurden Zahlen bis zu 9 Stellen aufgefüllt.
Überprüfen Sie DBTYPE_DBTIMESTAMP auf ICommandWithParameter::SetParameterInfo. SQL Server Native Client (ab SQL Server 2008) implementiert die OLE DB-Anforderung für bScale in ICommandWithParameter::SetParameterInfo, um für DBTYPE_DBTIMESTAMP auf die Sekundenbruchgenauigkeit festzulegen.
Die sp_columns gespeicherte Prozedur gibt nun "NO" anstelle von "NO" für die IS_NULLABLE Spalte zurück. Ab SQL Server Native Client 10.0 (SQL Server 2008) sp_columns gibt die gespeicherte Prozedur jetzt "NO" anstelle von "NO" für eine IS_NULLABLE Spalte zurück.
SQLSetDescRec, SQLBindParameter und SQLBindCol führen jetzt eine Konsistenzüberprüfung durch. Vor SQL Server Native Client 10.0 hat das Festlegen SQL_DESC_DATA_PTR keine Konsistenzprüfung für einen Deskriptortyp in SQLSetDescRec, SQLBindParameter oder SQLBindCol verursacht.
SQLCopyDesc führt jetzt die Deskriptorkonsistenzprüfung durch. Vor SQL Server Native Client 10.0 hat SQLCopyDesc keine Konsistenzprüfung durchgeführt, als das feld SQL_DESC_DATA_PTR für einen bestimmten Datensatz festgelegt wurde.
SQLGetDescRec führt keine Deskriptorkonsistenzprüfung mehr durch. Vor SQL Server Native Client 10.0 hat SQLGetDescRec eine Deskriptorkonsistenzprüfung durchgeführt, als das feld SQL_DESC_DATA_PTR festgelegt wurde. Dies war für die ODBC-Spezifikation nicht erforderlich, und in SQL Server Native Client 10.0 (SQL Server 2008) und höheren Versionen wird diese Konsistenzprüfung nicht mehr durchgeführt.
Es wird ein anderer Fehler zurückgegeben, wenn das Datum außerhalb des zulässigen Bereichs liegt. Für den datetime Typ gibt SQL Server Native Client (ab SQL Server 2008) eine andere Fehlernummer als in früheren Versionen zurückgegeben wurde.

Insbesondere gibt SQL Server Native Client 9.0 22007 für alle Werte des Out-of-Range-Jahres in Zeichenfolgenkonvertierungen in Zeichenfolgen zurückdatetime, und SQL Server Native Client ab Version 10.0 (SQL Server 2008) gibt 22008 zurück, wenn das Datum innerhalb des von datetime2 oder unterstützten Bereichs datetimesmalldatetimeliegt.
Bei datetime-Werten werden Sekundenbruchteile abgeschnitten, und diese Werte werden nicht gerundet, wenn sich durch die Rundung der Tag ändern würde. Vor SQL Server Native Client 10.0 besteht das Clientverhalten für datetime werte, die an den Server gesendet werden, darin, sie auf die nächste 1/300 Sekunde zu runden. Ab SQL Server Native Client 10.0 führt dieses Szenario zu einer Kürzung von Sekundenbruchteilen, wenn sich die Rundung am Tag ändert.
Mögliche Abschneidung von Sekunden für datetime den Wert. Eine Anwendung, die mit SQL Server 2008 Native Client (oder höher) erstellt wurde und eine Verbindung mit einem SQL Server 2005-Server herstellt, schneidet Sekunden und Sekunden für den Zeitteil der an den Server gesendeten Daten ab, wenn Sie an eine datetime-Spalte mit dem Typbezeichner DBTYPE_DBTIMESTAMP (OLE DB) oder SQL_TIMESTAMP (ODBC) und einer Skalierung von 0 binden.

Beispiel:

Eingabedaten: 1994-08-21 21:21:36.000

Einfügedaten: 1994-08-21 21:21:00.000
Die OLE DB-Datenkonvertierung von DBTYPE_DBTIME in DBTYPE_DATE kann keine Änderung des Tages mehr bewirken. In früheren Versionen als SQL Server Native Client 10.0 bewirkte der OLE DB-Konvertierungscode eine Änderung des Tages, wenn der Uhrzeitanteil eines DBTYPE_DATE-Werts innerhalb einer halben Sekunde vor Mitternacht lag. Ab SQL Server Native Client 10.0 ändert sich der Tag nicht (Sekundenbruchteile werden abgeschnitten und nicht gerundet).
IBCPSession::BCColFmt-Konvertierungsänderungen. Ab SQL Server Native Client 10.0 wird ein Bruchwert exportiert, wenn Sie IBCPSession::BCOColFmt zum Konvertieren von SQLDATETIME oder SQLDATETIME in einen Zeichenfolgentyp verwenden. Beim Konvertieren des Typs SQLDATETIME in den Typ SQLNVARCHARMAX wurden beispielsweise frühere Versionen von SQL Server Native Client zurückgegeben.

1989-02-01 00:00:00. SQL Server Native Client 10.0 und höhere Versionen geben 1989-02-01 00:00:00.0000000 zurück.
Die Größe der gesendeten Daten muss der in SQL_LEN_DATA_AT_EXEC angegebenen Länge entsprechen. Wenn SQL_LEN_DATA_AT_EXEC verwendet wird, muss die Größe der Daten der Länge entsprechen, die Sie in SQL_LEN_DATA_AT_EXEC angegeben haben. Sie können SQL_DATA_AT_EXEC verwenden, aber der Einsatz von SQL_LEN_DATA_AT_EXEC bietet potenzielle Leistungsvorteile.
Benutzerdefinierte Anwendungen, die die BCP API verwenden, können jetzt Warnungen anzeigen. Die BCP API erzeugt jetzt für alle Typen Warnmeldungen, wenn die Datenlänge die angegebene Länge eines Felds überschreitet. Früher wurde diese Warnung nur für Zeichentypen ausgegeben, aber nicht für alle Typen.
Wenn eine leere Zeichenfolge in eine sql_variant-Spalte eingefügt wird, die an einen Datum-/Uhrzeit-Typ gebunden wurde, dann wird dadurch ein Fehler erzeugt. In SQL Server Native Client 9.0 hat das Einfügen einer leeren Zeichenfolge in eine sql_variant Gebundene als Datums-/Uhrzeittyp keinen Fehler generiert. SQL Server Native Client 10.0 (und höher) generiert in dieser Situation ordnungsgemäß einen Fehler.
Strengere SQL_C_TYPE _TIMESTAMP- und DBTYPE_DBTIMESTAMP-Parameterüberprüfung Vor SQL Server Native Client 2008 wurden die Werte gerundet, datetime um der Skalierung von datetime Und smalldatetime Spalten nach SQL Server zu entsprechen. SQL Server 2008 Native Client (und höher) wendet die strengeren Validierungsregeln an, die in der ODBC-Kernspezifikation für Sekundenbruchteile definiert sind. Wenn ein Parameterwert nicht mit den angegebenen oder vom Client implizierten Dezimalstellen in den SQL-Typ konvertiert werden kann, ohne dass nachfolgende Stellen abgeschnitten werden, dann wird ein Fehler zurückgegeben.
SQL Server kann andere Ergebnisse zurückgeben, wenn ein Trigger ausgeführt wird. Änderungen, die in SQL Server 2008 eingeführt wurden, können dazu führen, dass eine Anwendung unterschiedliche Ergebnisse von einer Anweisung zurückgibt, die dazu führte, dass ein Trigger ausgeführt wurde, wenn NOCOUNT OFF er wirksam war. In dieser Situation kann die Anwendung einen Fehler generieren. Um diesen Fehler zu beheben, legen Sie im Trigger fest NOCOUNT ON , oder rufen Sie SQLMoreResults auf, um zum nächsten Ergebnis zu wechseln.

Weitere Informationen

Programmierung für SQL Server Native Client