Aktualisieren einer Anwendung von SQL Server 2005 Native Client

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

Wenn Sie ein Upgrade von Microsoft Data Access Components (MDAC) auf SQL Server Native Client durchführen, werden Ihnen möglicherweise auch einige Unterschiede im Verhalten auffallen. Weitere Informationen finden Sie unter Aktualisieren einer Anwendung von MDAC auf SQL Server Native Client.

SQL Server Native Client 9.0 war im Lieferumfang von SQL Server 2005 enthalten. 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 war im Lieferumfang von SQL Server 2012 enthalten.

Geändertes Verhalten in SQL Server Native Client seit SQL Server 2005

Beschreibung

OLE DB füllt nur Zahlen bis zur definierten Anzahl von Dezimalstellen auf.

In Konvertierungen, bei denen Daten an den Server gesendet werden, füllt SQL Server Native Client (ab SQL Server 2008) nachfolgende Nullen in Daten nur bis zur maximalen Länge von datetime-Werten auf. 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, die besagt, dass bScale in ICommandWithParameter::SetParameterInfo auf die Genauigkeit der Sekundenbruchteile für DBTYPE_DBTIMESTAMP festgelegt werden muss.

Die gespeicherte Prozedur sp_columns gibt jetzt für die Spalte IS_NULLABLE "NO" statt "NO " zurück.

Ab SQL Server Native Client 10.0 (SQL Server 2008) gibt die gespeicherte Prozedur sp_columns für die Spalte IS_NULLABLE "NO" statt "NO " zurück.

SQLSetDescRec, SQLBindParameter und SQLBindCol führen jetzt eine Konsistenzüberprüfung aus.

In früheren Versionen als SQL Server Native Client 10.0 wurde keine Konsistenzprüfung durchgeführt, wenn SQL_DESC_DATA_PTR für einen Deskriptortyp in SQLSetDescRec, SQLBindParameter oder SQLBindCol festgelegt wurde.

SQLCopyDesc überprüft jetzt die Deskriptorkonsistenz.

In früheren Versionen als SQL Server Native Client 10.0 führte SQLCopyDesc keine Konsistenzprüfung durch, wenn das SQL_DESC_DATA_PTR-Feld auf einen bestimmten Datensatz festgelegt wurde.

SQLGetDescRec überprüft die Deskriptorkonsistenz nicht mehr.

In früheren Versionen als SQL Server Native Client 10.0 führte SQLGetDescRec eine Konsistenzprüfung für die Deskriptoren durch, wenn das SQL_DESC_DATA_PTR-Feld festgelegt wurde. Die ODBC-Spezifikation erfordert dies nicht, und in SQL Server Native Client 10.0 (SQL Server 2008) sowie in höheren Versionen wird diese Konsistenzprüfung nicht mehr ausgefü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 für ein außerhalb des gültigen Bereichs liegendes Datum zurück als frühere Versionen.

Das heißt, SQL Server Native Client 9.0 gab in Zeichenfolgenkonvertierungen in datetime die Fehlernummer 22007 für alle Jahreswerte zurück, die außerhalb des zulässigen Bereichs lagen, und SQL Server Native Client gibt ab Version 10.0 (SQL Server 2008) die Fehlernummer 22008 zurück, wenn das Datum innerhalb des von datetime2 unterstützten Bereichs, aber außerhalb des von datetime oder smalldatetime unterstützten Bereichs liegt.

Bei datetime-Werten werden Sekundenbruchteile abgeschnitten, und diese Werte werden nicht gerundet, wenn sich durch die Rundung der Tag ändern würde.

In früheren Versionen als SQL Server Native Client 10.0 wurden datetime-Werte, die an den Server gesendet wurden, vom Client auf das nächste 1/300stel einer Sekunde gerundet. Ab SQL Server Native Client 10.0 werden in diesem Szenario die Sekundenbruchteile abgeschnitten, wenn die Rundung eine Änderung des Tags bewirkt.

Mögliches Abschneiden von Sekunden für den datetime-Wert.

Eine Anwendung, die mit SQL Server 2008 Native Client (oder höher) erstellt wurde, die eine Verbindung mit einem SQL Server 2005-Server herstellt, schneidet Sekunden und Sekundenbruchteile für den Zeitteil der Daten ab, die an den Server gesendet werden, wenn Sie an eine datetime-Spalte mit dem Typbezeichner DBTYPE_DBTIMESTAMP (OLE DB) oder SQL_TIMESTAMP (ODBC) und der Skala 0 binden.

Zum 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 wird der Tag nicht geändert (Sekundenbruchteile werden abgeschnitten und nicht gerundet).

Änderungen im IBCPSession::BCColFmt-Konvertierungsverhalten

Wenn mit IBCPSession::BCOColFmt Daten vom Typ SQLDATETIME oder SQLDATETIME in einen Zeichenfolgentyp konvertiert werden, wird ab SQL Server Native Client 10.0 ein Dezimalstellenwert exportiert. Wenn beispielsweise der Typ SQLDATETIME in den Typ SQLNVARCHARMAX konvertiert wird, gaben Vorgängerversionen von SQL Server Native Client Folgendes zurück:

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 wurde kein Fehler erzeugt, wenn eine leere Zeichenfolge in eine sql_variant-Spalte eingefügt wurde, die an einen Datum-/Uhrzeit-Typ gebunden war. 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 2008 Native Client wurden datetime-Werte entsprechend den Dezimalstellen von datetime- und smalldatetime-Spalten von SQL Server gerundet. SQL Server 2008 Native Client (und höher) wendet jetzt die strengeren Validierungsregeln an, die in der ODBC-Hauptspezifikation 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.

In SQL Server 2008 eingeführte Änderungen können bewirken, dass für eine Anwendung andere Ergebnisse von einer Anweisung zurückgegeben werden, die die Ausführung eines Triggers verursachen, wenn NOCOUNT OFF gültig war. In dieser Situation kann die Anwendung einen Fehler generieren. Um diesen Fehler zu beheben, setzen Sie NOCOUNT ON im Trigger, oder rufen SQLMoreResults auf, um zum nächsten Ergebnis zu wechseln.

Siehe auch

Andere Ressourcen

Programmierung für SQL Server Native Client