Udostępnij przez


Podczas konwersji z SQL do C

Poniższa tabela zawiera listę zagadnień, które należy uwzględnić podczas konwersji z SQL Server Data / czas typów do typów C.

Podczas konwersji

SQL_C_DATE

SQL_C_TIME

SQL_C_TIMESTAMP

SQL_C_BINARY

SQL_C_CHAR

SQL_C_WCHAR

SQL_CHAR

2,3,4,5

2,3,6,7,8

2,3,9,10,11

1

1

1

SQL_WCHAR

2,3,4,5

2,3,6,7,8

2,3,9,10,11

1

1

1

SQL_TYPE_DATE

OK

12

13

14

16

16

SQL_SS_TIME2

12

8

15

17

16

16

SQL_TYPE_TIMESTAMP

18

7,8

OK

19

16

16

SQL_SS_TIMESTAMPOFFSET

18,22

7,8,20

20

21

16

16

Klucz do symboli

Symbol

Znaczenie

OK

Nie problemy przy konwersji.

1

Reguły przed SQL Server 2008 zastosowanie.

2

Początkowe i końcowe spacje są ignorowane.

3

Ciąg jest analizowany do data, czas, czas strefy lub czas zoneoffset, pozwalając maksymalnie 9 cyfr dla ułamków sekund.Jeśli timezoneoffset jest analizowany, czas jest konwertowany na timezone klient.Jeżeli błąd wystąpi podczas tej konwersji, diagnostyczne rekord jest generowany z SQLSTATE 22018 i komunikat "Przepełnienie pole daty/godziny".

4

Jeśli wartość nie jest prawidłowa data, sygnaturę czasową lub wartość timestampoffset, diagnostyczne rekord jest generowany z SQLSTATE 22018 i komunikat "nieprawidłowy znak wartości dla specyfikacji rzutowania".

5

Jeśli czas jest różna od zera, diagnostyczne rekord jest generowany z 01S07 SQLSTATE i komunikat "" obcinania ułamkowe".

6

Jeśli wartość nie jest prawidłowy czas, sygnatura czasowa lub wartość timestampoffset, diagnostyczne rekord jest generowany z SQLSTATE 22018 i komunikat "nieprawidłowy znak wartości dla specyfikacji rzutowania".

7

Składnik data jest ignorowana.

8

Jeśli ułamków sekund są od zera, diagnostyczne rekordu jest generowany z 01S07 SQLSTATE i komunikat "" obcinania ułamkowe".

9

Jeśli wartość nie jest prawidłowa data, czas, sygnatura czasowa lub wartość timestampoffset, diagnostyczne rekord jest generowany z SQLSTATE 22018 i komunikat "nieprawidłowy znak wartości dla specyfikacji rzutowania".

10

Jeśli wartością jest prawidłowy czas, składnik data jest zestaw do bieżącej data klient.

11

Jeśli wartość jest prawidłowa data, czas jest zestaw na zero.

12

Diagnostyczne rekord jest generowany z SQLSTATE 07006 i komunikat "dane ograniczeniami typ atrybut".

13

Czas jest zestaw na zero.

14

Jeśli bufor nie jest wystarczająco duża, aby uwzględnić wszystkie zdarzenia SQL_DATE_STRUCT, diagnostyczne rekord jest generowany z SQLSTATE 22003 i komunikat "Liczbową wartość spoza zakres".

15

Data jest ustawiona na datę bieżącą klient.

16

Jeśli bufor nie jest wystarczająco duża, aby uwzględnić wszystkie zdarzenia konwertowany ciąg znaków, ale tylko ułamków sekund, występuje obcięcia i diagnostyczne rekord jest generowany z SQLSTATE 01004 i komunikat "danych String, prawo obcięte".Jeśli bufor nie jest wystarczająco duży, aby pomieścić ciąg wartości bez obcinania data, godziny lub przesunięcia składników, diagnostyczne rekord jest generowany z SQLSTATE 22003 i komunikat "Liczbową wartość spoza zakres".Należy zauważyć, że dla data i timestampoffset SQLSTATE 01004 jest niemożliwe, ponieważ część po prawej stronie konwertowany ciąg nie zawiera ułamków sekund.W związku z tym wszelkie obcinania spowoduje utratę danych.

17

Jeśli bufor nie jest wystarczająco duża, aby uwzględnić wszystkie zdarzenia SQL_SS_TIME2_STRUCT, diagnostyczne rekord jest generowany z SQLSTATE 22003 i komunikat "Liczbową wartość spoza zakres".

18

Jeśli czas jest różna od zera, diagnostyczne rekord jest generowany z 01S07 SQLSTATE i komunikat "" obcinania ułamkowe".

19

Jeśli serwer jest typu Data/Godzina lub smalldatetime, wartość jest zwracana w taki sam sposób, jak w SQL Server 2000 i wcześniejszych wersjach. Odpowiada w formacie łańcuchowym TDS, a wartość 4-bajtowego smalldatetime i wartość 8-bajtowe dla typu Data/Godzina.

Jeśli typ serwera jest datetime2, zwracana jest wartość jako SQL_TIMESTAMP_STRUCT.Jeśli bufor nie jest wystarczająco duży, aby pomieścić zwrócone wartości, diagnostyczne rekord jest generowany z SQLSTATE 22003 i komunikat "Liczbową wartość spoza zakres".

20

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

21

Jeśli bufor jest wystarczająco duża, aby uwzględnić wszystkie zdarzenia SQL_SS_TIMESTAMPOFFSET_STRUCT, wartość jest zwracana jako SQL_SS_TIMESTAMPOFFSET_STRUCT.W przeciwnym razie diagnostyczne rekord jest generowany z SQLSTATE 22003 i komunikat "Liczbową wartość spoza zakres".

22

Wartość jest konwertowany na timezone klient przed data jest wyodrębniana.Zapewnia to zgodność z innymi konwersje typów timestampoffset.Jeżeli błąd wystąpi podczas tej konwersji, diagnostyczne rekord jest generowany z SQLSTATE 22008 i komunikat "Przepełnienie pole daty/godziny".Może to spowodować data, która różni się od wartości uzyskane przez proste obcinania.

W tabela, w tym temacie opisano podczas konwersji między zwrócone do klient i typem w wiązaniu.Dla parametrów wyjściowych, jeśli określono typ serwera SQLBindParameter pasuje nie rzeczywisty typ na serwerze, niejawna konwersja zostanie przeprowadzona przez serwer i zwrócone do klient będzie zgodny z typem określonym przez SQLBindParameter. Może to prowadzić do konwersji nieoczekiwane wyniki, gdy reguły konwersji na serwerze są inne niż te, które są wymienione w powyższej tabela.Na przykład, gdy domyślna data należy podać, SQL Server używa 1900-1-1, a nie data bieżąca.

See Also

Concepts