Freigeben über


Client-/Server-Konvertierungen

Dieses Thema beschreibt die Datums-/Uhrzeit-Konvertierungen zwischen in SQL Server Native Client OLE DB und SQL Server 2008 (oder höher) entwickelten Clientanwendungen.

Konvertierungen

In diesem Thema werden die auf dem Client durchgeführten Konvertierungen beschrieben. Wenn der Client Bruchsekundengenauigkeit für einen Parameter angibt, die von der auf dem Server definierten abweicht, schlägt die Clientkonvertierung in Fällen, in denen der Server eine erfolgreiche Konvertierung zugelassen hätte, möglicherweise fehl. Insbesondere behandelt der Client jedes Abschneiden von Sekundenbruchteilen als Fehler, wohingegen SQL Server Zeitwerte auf die nächste ganze Sekunde rundet.

Wenn ICommandWithParameters::SetParameterInfo nicht aufgerufen wird, werden DBTYPE_DBTIMESTAMP-Bindungen konvertiert, als ob sie das datetime2-Format aufweisen würden.

Nach ->

Von

DBDATE (date)

DBTIME (time)

DBTIME2 (time)

DBTIMESTAMP (smalldatetime)

DBTIMESTAMP (datetime)

DBTIMESTAMP (datetime2)

DBTIMESTAMPOFFSET (datetimeoffset)

STR

WSTR

SQLVARIANT

(sql_variant)

DATE

1,2

1,3,4

4,12

1,12

1,12

1,12

1,5, 12

1,12

1,12

1,12

datetime2(0)

DBDATE

1

-

-

1,6

1,6

1,6

1,5, 6

1,10

1,10

1

date

DBTIME

-

1

1

1,7

1,7

1,7

1,5, 7

1,10

1,10

1

Time(0)

DBTIME2

-

1,3

1

1,7,10,14

1,7,10,15

1,7,10

1,5,7,10

1,10,11

1,10,11

1

Time(7)

DBTIMESTAMP

1,2

1,3,4

1,4,10

1,10,14

1,10,15

1,10

1,5,10

1,10,11

1,10,11

1,10

datetime2(7)

DBTIMESTAMPOFFSET

1,2,8

1,3,4,8

1,4,8,10

1,8,10,14

1,8,10,15

1,8,10

1,10

1,10,11

1,10,11

1,10

datetimeoffset(7)

FILETIME

1,2

1,3,4

1,4,13

1,13

1,13

1,13

1,5,13

1,13

1,10

1,13

datetime2(3)

BYTES

-

-

-

-

-

-

-

Nicht zutreffend

Nicht zutreffend

Nicht zutreffend

VARIANT

1

1

1

1,10

1,10

1,10

1,10

Nicht zutreffend

Nicht zutreffend

1,10

SSVARIANT

1,16

1,16

1,16

1,10,16

1,10,16

1,10,16

1,10,16

Nicht zutreffend

Nicht zutreffend

1,16

BSTR

1,9

1,9

1,9,10

1,9,10

1,9,10

1,9,10

1,9,10

Nicht zutreffend

Nicht zutreffend

Nicht zutreffend

STR

1,9

1,9

1,9,10

1,9,10

1,9,10

1,9,10

1,9,10

Nicht zutreffend

Nicht zutreffend

Nicht zutreffend

WSTR

1,9

1,9

1,9,10

1,9,10

1,9,10

1,9,10

1,9,10

Nicht zutreffend

Nicht zutreffend

Nicht zutreffend

Aufschlüsselung der Symbole

Symbol

Bedeutung

-

Es wird keine Konvertierung unterstützt. Wenn beim Aufruf von IAccessor::CreateAccessor die Bindung überprüft wird, wird DBBINDSTATUS_UPSUPPORTEDCONVERSION in rgStatus zurückgegeben. Bei Verzögerung der Accessorüberprüfung wird DBSTATUS_E_BADACCESSOR festgelegt.

Nicht zutreffend

Nicht zutreffend

1

Wenn die bereitgestellten Daten nicht gültig sind, wird DBSTATUS_E_CANTCONVERTVALUE festgelegt. Die Eingabedaten werden überprüft, bevor die Konvertierungen angewendet werden, d. h. auch wenn eine Komponente von einer nachfolgenden Konvertierung ignoriert wird, muss sie gültig sein, damit die Konvertierung ordnungsgemäß durchgeführt werden kann.

2

Zeitfelder werden ignoriert.

3

Sekundenbruchteile müssen 0 sein, oder es wird DBSTATUS_E_DATAOVERFLOW festgelegt.

4

Die Datumskomponente wird ignoriert.

5

Die Zeitzone wird auf die Zeitzone des Clients festgelegt.

6

Die Uhrzeit wird auf 0 festgelegt.

7

Das Datum wird auf das aktuelle Datum festgelegt.

8

Die Zeit wird zu UTC konvertiert. Wenn während dieser Konvertierung ein Fehler auftritt, wird DBSTATUS_E_CANTCONVERTVALUE festgelegt.

9

Die Zeichenfolge wird als ISO-Literal analysiert und in den Zieltyp konvertiert. Falls dies fehlschlägt, wird die Zeichenfolge als OLE-Datumsliteral analysiert (welches gleichfalls Zeitkomponenten enthält) und vom OLE-Datumstyp (DBTYPE_DATE) in den Zieldatumstyp konvertiert.

Wenn der Zieltyp DBTIMESTAMP, smalldatetime, datetime oder datetime2 ist, muss die Zeichenfolge mit der Syntax für Datums-, Uhrzeit- oder datetime2-Literalen oder der von OLE erkannten Syntax konform sein. Wenn die Zeichenfolge ein Datumsliteral ist, werden alle Uhrzeitkomponenten auf 0 festgelegt. Wenn die Zeichenfolge ein Uhrzeitliteral ist, wird das Datum auf das aktuelle Datum festgelegt.

Für alle anderen Zieltypen muss die Zeichenfolge der Syntax für Literale des Zieltyps entsprechen.

10

Wenn das Abschneiden von Sekundenbruchteilen Datenverlust verursacht, wird DBSTATUS_E_DATAOVERFLOW festgelegt. Für Zeichenfolgenkonvertierungen ist eine Überlaufprüfung nur möglich, wenn die Zeichenfolge der ISO-Syntax entspricht. Wenn es sich bei der Zeichenfolge um ein OLE-Datumsliteral handelt, werden Sekundenbruchteile gerundet.

Zur Konvertierung von DBTIMESTAMP (datetime) in smalldatetime schneidet SQL Server Native Client den Sekundenwert automatisch ab, statt den DBSTATUS_E_DATAOVERFLOW-Fehler auszulösen.

11

Die Anzahl der Dezimalziffern für Sekundenbruchteile (Dezimalstellen) wird anhand der Größe der Zielspalte gemäß der folgenden Tabelle ermittelt. Für Spaltengrößen, die den Bereich in der Tabelle übersteigen, werden 9 Dezimalstellen impliziert. Diese Konvertierung sollte bis zu neun Dezimalstellen für Sekundenbruchteile ermöglichen, das von OLE DB zugelassene Maximum.

Wenn jedoch der Quelltyp DBTIMESTAMP ist, und Sekundenbruchteile auf 0 gesetzt wurden, werden keine Dezimalstellen für Sekundenbruchteile und kein Dezimaltrennzeichen generiert. Dieses Verhalten stellt die Abwärtskompatibilität für Anwendungen sicher, die mit älteren OLE DB-Anbietern entwickelt wurden.

Eine Spaltengröße von ~0 impliziert unbegrenzte Größe in OLE DB (9 Ziffern, sofern nicht die 3-Ziffern-Regel für DBTIMESTAMP gilt).

TypLänge (in Zeichen)Dezimalstellen
DBTIME28, 10..180,1..9
DBTIMESTAMP19, 21..290,1..9
DBTIMESTAMPOFFSET26, 28..360,1..9

12

Die in Vorgängerversionen von SQL Server 2008 gültige Konvertierungssemantik für DBTYPE_DATE wird beibehalten. Die Sekundenbruchteile werden zu 0 abgeschnitten.

13

Die in Vorgängerversionen von SQL Server 2008 gültige Konvertierungssemantik für DBTYPE_FILETIME wird beibehalten. Wenn Sie die Windows FileTimeToSystemTime-API verwenden, ist die Genauigkeit für Sekundenbruchteile auf 1 Millisekunde beschränkt.

14

Die in Vorgängerversionen von SQL Server 2008 gültige Konvertierungssemantik für smalldatetime wird beibehalten. Die Sekunden werden auf 0 festgelegt.

15

Die in Vorgängerversionen von SQL Server 2008 gültige Konvertierungssemantik für datetime wird beibehalten. Sekunden werden zum nächstem 300stel einer Sekunde gerundet. 

16

Das Konvertierungsverhalten eines in eine SSVARIANT-Clientstruktur eingebetteten Werts (eines bestimmten Typs) ist mit dem Verhalten desselben Werts und Typs identisch, wenn er nicht eingebettet ist.