Udostępnij za pośrednictwem


Typy danych języka C

Typy danych ODBC C wskazują typ danych języka C używanych do przechowywania danych w aplikacji.

Wszystkie sterowniki muszą obsługiwać wszystkie typy danych języka C. Jest to wymagane, ponieważ wszystkie sterowniki muszą obsługiwać wszystkie typy C, do których można przekonwertować typy SQL, które obsługują, a wszystkie sterowniki obsługują co najmniej jeden typ SQL znaków. Ponieważ typ SQL znaku można przekonwertować na i ze wszystkich typów C, wszystkie sterowniki muszą obsługiwać wszystkie typy C.

Typ danych języka C jest określony w funkcjach SQLBindCol i SQLGet Data z argumentem TargetType oraz w funkcji SQLBindParameter z argumentem ValueType. Można go również określić, wywołując SQLSetDescField, aby ustawić pole SQL_DESC_CONCISE_TYPE ARD lub APD, lub wywołując SQLSetDescRec z argumentem Type (i SubType argument) i DescriptorHandle do uchwytu ARD lub APD.

W poniższych tabelach wymieniono prawidłowe identyfikatory typów danych języka C. W tabeli wymieniono również typ danych ODBC C odpowiadający każdemu identyfikatorowi i definicji tego typu danych.

Identyfikator typu języka C OdBC C typedef Typ języka C
SQL_C_CHAR SQLCHAR * bez znaku *
SQL_C_WCHAR SQLWCHAR * wchar_t *
SQL_C_SSHORT[j] SQLSMALLINT krótka int
SQL_C_USHORT[j] SQLUSMALLINT niepodpisane krótkie int
SQL_C_SLONG[j] SQLINTEGER długa int
SQL_C_ULONG[j] SQLUINTEGER niepodpisane długie int
SQL_C_FLOAT SQLREAL spławik
SQL_C_DOUBLE SQLDOUBLE, SQLFLOAT podwójny
SQL_C_BIT SQLCHAR bez znaku
SQL_C_STINYINT[j] SQLSCHAR znak ze znakiem
SQL_C_UTINYINT[j] SQLCHAR bez znaku
SQL_C_SBIGINT SQLBIGINT _int64[h]
SQL_C_UBIGINT SQLUBIGINT bez znaku _int64[h]
SQL_C_BINARY SQLCHAR * bez znaku *
SQL_C_BOOKMARK[i] ZAKŁADKA niepodpisane długie int[d]
SQL_C_VARBOOKMARK SQLCHAR * bez znaku *
Wszystkie typy danych interwału języka C SQL_INTERVAL_STRUCT Zobacz sekcję struktury interwału języka C w dalszej części tego dodatku.

identyfikator typu C SQL_C_TYPE_DATE[c]

odBC C typedef SQL_DATE_STRUCT

typ C

struct tagDATE_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;    
} DATE_STRUCT;[a]  

identyfikator typu C SQL_C_TYPE_TIME[c]

odBC C typedef SQL_TIME_STRUCT

typ C

struct tagTIME_STRUCT {  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
} TIME_STRUCT;[a]  

identyfikator typu C SQL_C_TYPE_TIMESTAMP[c]

odBC C typedef SQL_TIMESTAMP_STRUCT

typ C

struct tagTIMESTAMP_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
   SQLUINTEGER fraction;[b]   
} TIMESTAMP_STRUCT;[a]  

identyfikator typu C SQL_C_NUMERIC

odBC C typedef SQL_NUMERIC_STRUCT

typ C

struct tagSQL_NUMERIC_STRUCT {  
   SQLCHAR precision;  
   SQLSCHAR scale;  
   SQLCHAR sign[g];  
   SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f]   
} SQL_NUMERIC_STRUCT;  

SQL_C_GUID identyfikatora typu C

odBC C typedef SQLGUID

typ C

struct tagSQLGUID {  
   DWORD Data1;  
   WORD Data2;  
   WORD Data3;  
   BYTE Data4[8];  
} SQLGUID;[k]  

[a] Wartości pól roku, miesiąca, dnia, godziny, minuty i sekundy w typach danych datetime C muszą być zgodne z ograniczeniami kalendarza gregoriańskiego. (Zobacz ograniczenia kalendarza gregoriańskiego w dalszej części niniejszego dodatku).

[b] Wartość pola ułamkowego to liczba miliardowych części sekundy i waha się od 0 do 999 999 999 999 (1 mniej niż 1 miliard). Na przykład wartość pola ułamkowego na pół sekundy wynosi 500 000 000, dla tysięcy sekundy (jeden milisekund) wynosi 1000 000, dla miliona sekundy (jedna mikrosekunda) wynosi 1000, a dla miliarda (jeden nanosekund) wynosi 1.

[c] W odBC 2.xtypy danych daty, godziny i znacznika czasu języka C są SQL_C_DATE, SQL_C_TIME i SQL_C_TIMESTAMP.

[d] Aplikacje ODBC 3*.x* powinny używać SQL_C_VARBOOKMARK, a nie SQL_C_BOOKMARK. Gdy aplikacja ODBC 3*.x* współpracuje z odBC 2.x sterownik menedżer sterowników ODBC 3*.x* zamapuje SQL_C_VARBOOKMARK na SQL_C_BOOKMARK.

[e] Liczba jest przechowywana w polu val struktury SQL_NUMERIC_STRUCT jako skalowana liczba całkowita, w niewielkim trybie endińskim (najbardziej znaczący bajt po lewej stronie jest najmniej znaczącym bajtem). Na przykład liczba 10.001 podstawowa 10 ze skalą 4 jest skalowana do liczby całkowitej 100010. Ponieważ jest to 186AA w formacie szesnastkowym, wartość w SQL_NUMERIC_STRUCT to "AA 86 01 00 00 ... 00", z liczbą bajtów zdefiniowanych przez SQL_MAX_NUMERIC_LEN #define.

Aby uzyskać więcej informacji na temat SQL_NUMERIC_STRUCT, zobacz HOWTO: Pobieranie danych liczbowych za pomocą SQL_NUMERIC_STRUCT.

[f] Pola dokładności i skalowania typu danych SQL_C_NUMERIC są używane do danych wejściowych z aplikacji i danych wyjściowych ze sterownika do aplikacji. Gdy sterownik zapisze wartość liczbową w SQL_NUMERIC_STRUCT, użyje własnej wartości domyślnej specyficznej dla sterownika jako wartości pola precyzji i użyje wartości w polu SQL_DESC_SCALE deskryptora aplikacji (domyślnie 0) dla pola skalowania. Aplikacja może podać własne wartości dokładności i skali, ustawiając SQL_DESC_PRECISION i SQL_DESC_SCALE pola deskryptora aplikacji.

[g] Pole znaku to 1, jeśli dodatnie, 0, jeśli ujemne.

[h] _int64 może nie być dostarczany przez niektóre kompilatory.

[i] _SQL_C_BOOKMARK został przestarzały w odBC 3*.x*.

[j] _SQL_C_SHORT, SQL_C_LONG i SQL_C_TINYINT zostały zastąpione przez typy podpisane i niepodpisane: SQL_C_SSHORT i SQL_C_USHORT, SQL_C_SLONG i SQL_C_ULONG oraz SQL_C_STINYINT i SQL_C_UTINYINT. Sterownik ODBC 3*.x*, który powinien współpracować z ODBC 2.x aplikacje powinny obsługiwać SQL_C_SHORT, SQL_C_LONG i SQL_C_TINYINT, ponieważ po wywołaniu menedżer sterowników przekazuje je do sterownika.

[k] SQL_C_GUID można przekonwertować tylko na SQL_CHAR lub SQL_WCHAR.

Ta sekcja zawiera następujący temat.

Zobacz też

typy danych C w ODBC