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.