Udostępnij za pośrednictwem


Konwersje od C do programu SQL

Ten temat zawiera listę zagadnień, które należy uwzględnić podczas konwersji typów C SQL Server Data/Godzina typów.

Konwersje, opisane w poniższej tabela mają zastosowanie do konwersji klient.W przypadkach, gdy klient określa ułamkowe precyzję drugi parametr, który różni się od zdefiniowanego na serwerze, może się powieść konwersji klienta, ale serwer zwróci błąd, gdy SQLExecute lub SQLExecuteDirect nazywa się. W szczególności ODBC traktuje wszystkie obcinania ułamków sekund jako błąd, należy SQL Server zachowanie to zaokrąglić; na przykład zaokrąglana po przejściu od datetime2(6) Aby datetime2(2). Wartości daty/godziny kolumna są zaokrąglane do 1/300th druga i smalldatetime kolumna mają sekund wyzerowane przez serwer.

SQL_TYPE_DATE

SQL_TYPE_TIME

SQL_SS_TIME2

SQL_TYPE_TIMESTAMP

SQL_SS_TIMSTAMPOFFSET

SQL_CHAR

SQL_WCHAR

SQL_C_DATE

1

-

-

1,6

1,5,6

1,13

1,13

SQL_C_TIME

-

1

1

1,7

1,5,7

1,13

1,13

SQL_C_BINARY(SQL_SS_TIME2_STRUCT)

NIE DOTYCZY

NIE DOTYCZY

1,10,11

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

SQL_C_TYPE_TIMESTAMP

1,2

1,3,4

1,4,10

1,10

1,5,10

1,13

1,13

SQL_C_BINARY(SQL_SS_TIMESTAMPOFFSET_STRUCT)

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

1,10,11

NIE DOTYCZY

NIE DOTYCZY

SQL_C_CHAR/SQL_WCHAR (Data)

9

9

9

9,6

9,5,6

NIE DOTYCZY

NIE DOTYCZY

SQL_C_CHAR/SQL_WCHAR (time2)

9

9,3

9,10

9,7,10

9,5,7,10

NIE DOTYCZY

NIE DOTYCZY

SQL_C_CHAR/SQL_WCHAR (datetime)

9,2

9,3,4

9,4,10

9,10

9,5,10

NIE DOTYCZY

NIE DOTYCZY

SQL_C_CHAR/SQL_WCHAR (datetimeoffset)

9,2,8

9,3,4,8

9,4,8,10

9,8,10

9,10

NIE DOTYCZY

NIE DOTYCZY

SQL_C_BINARY(SQL_DATE_STRUCT)

1,11

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

SQL_C_BINARY(SQL_TIME_STRUCT)

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

SQL_C_BINARY(SQL_TIMESTAMP_STRUCT)

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

NIE DOTYCZY

Klucz do symboli

Symbol

Znaczenie

-

Konwersja nie jest obsługiwana.Diagnostyczne rekord jest generowany z SQLSTATE 07006 i komunikat "dane ograniczeniami typ atrybut".

1

Jeśli dostarczonych danych nie jest prawidłowy, diagnostyczne rekord zostanie wygenerowany SQLSTATE 22007 i komunikat "format daty/godziny nieprawidłowe".

2

pole czas musi mieć wartość zero lub diagnostyczne rekord jest generowany z SQLSTATE 22008 i komunikat "Przepełnienie pole daty/godziny".

3

Ułamków sekund musi mieć wartość zero lub diagnostyczne rekord jest generowany z SQLSTATE 22008 i komunikat "Przepełnienie pole daty/godziny".

4

Składnik data jest ignorowana.

5

The timezone jest zestaw do klient timezone zestaw ting.

6

Czas jest zestaw na zero.

7

Data jest zestaw do bieżącej daty.

8

Czas jest konwertowana z timezone klient z czasem UTC.Jeżeli błąd wystąpi podczas tej konwersji, diagnostyczne rekord jest generowany z SQLSTATE 22008 i komunikat "Przepełnienie pole daty/godziny".

9

Ciąg jest analizowany i przekonwertowana na datę, Data/Godzina, datetimeoffset lub wartość czas, w zależności od pierwszy znak interpunkcyjny napotkał i obecność pozostałe składniki.Ciąg jest następnie konwertowana na typ miejsce docelowe, przy czym stosuje reguły w powyższej tabela dla typu urządzenie źródłowe, odnalezione przez ten proces.W przypadku wykrycia błędu podczas analizowania danych diagnostycznych rekordu jest generowany z SQLSTATE 22018 i komunikat "nieprawidłowy znak wartości dla specyfikacji rzutowania".Parametrów typu Data/Godzina i smalldatetime, jeśli rok jest poza zakres obsługiwane przez te typy, diagnostyczne rekord jest generowany w wyniku użycia SQLSTATE 22007 i komunikat "format daty/godziny nieprawidłowe".

Dla datetimeoffset, wartość musi być w ramach zakres po konwersji na UTC, nawet jeśli wymagana jest konwersja nie do czasu UTC.Dzieje się tak, ponieważ TDS, a serwer zawsze znormalizować czas datetimeoffset wartości dla czas UTC, tak, aby klient musi zweryfikować tego czas składników znajdują się w zasięgu, obsługiwane po konwersji do czas UTC.Jeśli wartość nie jest obsługiwane zakres czasu UTC, diagnostyczne rekord jest generowany z SQLSTATE 22007 i komunikat "format daty/godziny nieprawidłowe".

10

Jeśli nastąpi obcięcie przy utracie danych, rekord diagnostyczne wygenerowany przy użyciu SQLSTATE 22008 i komunikat "Przepełnienie pole daty/godziny".Ten błąd występuje również, jeśli wartość mieści się w zakresie, który może być reprezentowany przez zakres czasu UTC, używany przez serwer.

11

Jeśli długość bajtów danych nie jest równa wielkości struktura wymagane przez typ SQL, generowany jest rekord diagnostyczne SQLSTATE 22003 i komunikat "Liczbową wartość spoza zakres".

12

Jeśli długość bajtów danych jest 4 lub 8, dane są przesyłane do serwera w TDS smalldatetime lub daty/godziny postaci nieprzetworzonej.Jeśli długość bajtów danych dokładnie odpowiada rozmiarowi SQL_TIMESTAMP_STRUCT, dane są konwertowane na format TDS dla datetime2.

13

Jeśli nastąpi obcięcie przy utracie danych, diagnostyczne rekordu jest generowany z SQLSTATE 22001 i komunikat "Danych ciąg," prawej obcięte.

Liczba cyfr ułamków sekund (skala) zależy od rozmiaru kolumna docelowej zgodnie z następującą tabelą:

TypSkala domyślna0Skala domyślna1..9
SQL_C_TYPE_TIMESTAMP1921..29

Jednakże w przypadku SQL_C_TYPE_TIMESTAMP, jeśli ułamków sekund można przedstawić z trzech znaków bez utraty danych i 23 lub większy jest rozmiar kolumna, a następnie dokładnie trzy cyfry ułamków sekund są generowane.To zachowanie Wstecz zapewnia zgodność aplikacji utworzonych przy użyciu starszych sterowników ODBC.

W przypadku rozmiarów kolumn większy od zakres w tabela jest implikowane skali od 9.Ta konwersja powinna uwzględniać do dziewięciu cyfr ułamków sekund, maksymalną dozwoloną przez ODBC.

Rozmiar kolumna równą zero oznacza nieograniczony rozmiar dla typów znaków o zmiennej długości w ODBC (cyfry 9, o ile ma zastosowanie reguła 3-cyfrowy SQL_C_TYPE_TIMESTAMP).Określanie rozmiaru kolumna równą zero z typem znak stałej długości, występuje błąd.

NIE DOTYCZY

Istniejące SQL Server 2005 i starsze zachowanie jest obsługiwane.

See Also

Concepts