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
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 |
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
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