Udostępnij przez


Konwersje wykonywane z klienta na serwer

Dotyczy do:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSystem Platform Analitycznych (PDW)Baza danych SQL w Microsoft Fabric

pobierz sterownik OLE DB

Ten artykuł opisuje konwersje dat/godziny wykonywane pomiędzy aplikacją kliencką napisaną za pomocą sterownika OLE DB dla SQL Server 2008 (10.0.x) a nowszymi wersjami.

Conversions

Ten artykuł opisuje konwersje dokonane na kliencie. Jeśli klient określa precyzję ułamkowych sekund dla parametru różniącego się od tego zdefiniowanego na serwerze, konwersja klienta może spowodować awarię w przypadkach, gdy serwer pozwoli na powodzenie operacji. W szczególności klient traktuje każde obcięcie ułamków sekund jako błąd, podczas gdy SQL Server zaokrągla wartości czasowe do najbliższej całej sekundy.

Jeśli ICommandWithParameters::SetParameterInfo nie zostanie wywołany, DBTYPE_DBTIMESTAMP wiązania są konwertowane tak, jakby były datetime2.

Do->

Źródło
DBDATE (data) DBTIME (czas) DBTIME2 (czas) DBTIMESTAMP (smalldatetime) DBTIMESTAMP (datatime) 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

Czas(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)
Znacznik 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)
BAJTÓW - - - - - - - N/A N/A N/A
VARIANT 1 1 1 1, 10 1, 10 1, 10 1, 10 N/A N/A 1, 10
SSVARIANT 1, 16 1, 16 1, 16 1, 10, 16 1, 10, 16 1, 10, 16 1, 10, 16 N/A N/A 1, 16
BSTR 1, 9 1, 9 1, 9, 10 1, 9, 10 1, 9, 10 1, 9, 10 1, 9, 10 N/A N/A N/A
STR 1, 9 1, 9 1, 9, 10 1, 9, 10 1, 9, 10 1, 9, 10 1, 9, 10 N/A N/A N/A
WSTR 1, 9 1, 9 1, 9, 10 1, 9, 10 1, 9, 10 1, 9, 10 1, 9, 10 N/A N/A N/A

Klucz do symboli

Symbol Meaning
- Nie jest obsługiwana konwersja. Jeśli powiązanie zostanie zweryfikowane podczas wywołania IAccessor::CreateAccessor, DBBINDSTATUS_UPSUPPORTEDCONVERSION zwracane jest w rgStatus. Gdy walidacja akwaratorów jest odroczona, DBSTATUS_E_BADACCESSOR jest ustalana.
N/A Nie dotyczy.
1 Jeśli dostarczone dane nie są poprawne, DBSTATUS_E_CANTCONVERTVALUE jest ustalane. Dane wejściowe są weryfikowane przed zastosowaniem konwersji, więc nawet jeśli komponent zostanie zignorowany przez kolejną konwersję, musi być nadal ważny, aby konwersja zakończyła sukces.
2 Pola czasowe są ignorowane.
3 Ułamki sekund muszą być równe zeru, inaczej DBSTATUS_E_DATAOVERFLOW jest ustawione.
4 Komponent daty jest pomijany.
5 Strefa czasowa jest ustawiona na ustawienia strefy czasowej klienta.
6 Czas ustawiony jest na zero.
7 Data jest ustalana na aktualną.
8 Czas jest przeliczany na UTC. Jeśli podczas tej konwersji wystąpi błąd, DBSTATUS_E_CANTCONVERTVALUE jest ustalany.
9 Ciąg jest analizowany jako literal ISO i konwertowany na typ docelowy. Jeśli to się nie powiedzie, ciąg jest analizowany jako literal daty OLE (który również zawiera składowe czasowe) i konwertowany z daty OLE (DBTYPE_DATE) na typ docelowy.

Jeśli typ docelowy to DBTIMESTAMP, smalldatetime, datetime lub datetime2, ciąg musi być zgodny ze składnią dla literali date, time lub datetime2 , albo składnią rozpoznawaną przez OLE. Jeśli ciąg jest literalem daty, wszystkie składowe czasu są ustawione na zero. Jeśli ciąg jest literalnym czasem, data jest ustalana na bieżącą.

Dla wszystkich pozostałych typów docelowych ciąg musi odpowiadać składni literalnych tego typu docelowego.
10 Jeśli dojdzie do obcięcia ułamków sekund z utratą danych, DBSTATUS_E_DATAOVERFLOW jest ustalane. W przypadku konwersji ciągów znaków weryfikacja przebiegu jest możliwa tylko wtedy, gdy ciąg jest zgodny z składnią ISO. Jeśli ciąg jest literalem OLE daty, sekundy ułamkowe są zaokrąglane.

Do konwersji z DBTIMESTAMP (datetime) na smalldatetime OLE DB Driver for SQL Server cicho obcina wartość sekund zamiast podniesieć błąd DBSTATUS_E_DATAOVERFLOW.
11 Liczba ułamkowych drugich cyfr (skala) jest określana na podstawie rozmiaru kolumny docelowej, zgodnie z poniższą tabelą. Dla rozmiarów kolumn większych niż zakres w tabeli zakłada się skalę 9. Ta konwersja powinna umożliwić do dziewięciu ułamkowych cyfr sekundowych, co jest maksymalną dozwoloną przez OLE DB.

Jednak jeśli typ źródła to DBTIMESTAMP, a ułamkowe sekundy to zero, nie generuje się ułamkowych cyfr sekund ani przecinka dziesiętnego. Takie zachowanie zapewnia kompatybilność wsteczną dla aplikacji rozwijanych przy użyciu starszych dostawców OLE DB.

Rozmiar kolumny ~0 oznacza nieograniczony rozmiar w OLE DB (9 cyfr, chyba że obowiązuje zasada 3-cyfrowa dla znacznika czasu bazy danych).
12 Semantyka konwersji sprzed SQL Server 2008 (10.0.x) dla DBTYPE_DATE jest utrzymywana. Ułamkowe sekundy są skracane do zera.
13 Semantyka konwersji sprzed SQL Server 2008 (10.0.x) dla DBTYPE_FILETIME jest utrzymywana. Jeśli używasz API Windows FileTimeToSystemTime, precyzja ułamków sekund jest ograniczona do 1 milisekundy.
14 Semantyka konwersji sprzed SQL Server 2008 (10.0.x) dla smalldatetime jest zachowana. Sekundy ustawione są na zero.
15 Semantyka konwersji sprzed SQL Server 2008 (10.0.x) dla czasu datowego jest zachowana. Sekundy są zaokrąglane do najbliższej 300. sekundy.
16 Zachowanie konwersji wartości (danego typu) osadzonej w strukturze klienta SSVARIANT jest takie samo jak zachowanie tej samej wartości i typu, gdy nie jest osadzona w strukturze klienta SSVARIANT.
Typ Długość (w characie) Scale
DBTIME2 8, 10..18 0,1..9
Znacznik DBTIMESTAMP 19, 21..29 0,1..9
DBTIMESTAMPOFFSET 26, 28..36 0,1..9

Zobacz też

Oprawy i konwersje (OLE DB)