Datové typy jazyka C
Datové typy ODBC C označují datový typ vyrovnávacích pamětí jazyka C, které se používají k ukládání dat v aplikaci.
Všechny ovladače musí podporovat všechny datové typy jazyka C. To je povinné, protože všechny ovladače musí podporovat všechny typy jazyka C, na které lze převést typy SQL, a všechny ovladače podporují alespoň jeden znakový typ SQL. Vzhledem k tomu, že typ SQL znaku lze převést na a ze všech typů jazyka C, musí všechny ovladače podporovat všechny typy jazyka C.
Datový typ C je zadán v SQLBindCol a SQLGetData funkce s argumentem TargetType a ve funkci SQLBindParameter s argumentem ValueType. Lze ho také určit voláním SQLSetDescField nastavit SQL_DESC_CONCISE_TYPE pole ARD nebo APD, nebo voláním SQLSetDescRec s argumentem Typ (a SubType argument) a DescriptorHandle argument nastavený na popisovač ARD nebo APD.
Následující tabulky uvádí platné identifikátory typů pro datové typy jazyka C. Tabulka také uvádí datový typ ODBC C, který odpovídá každému identifikátoru a definici tohoto datového typu.
Identifikátor typu C | ODBC C – typedef | Typ jazyka C |
---|---|---|
SQL_C_CHAR | SQLCHAR * | znak bez znaménka * |
SQL_C_WCHAR | SQLWCHAR * | wchar_t * |
SQL_C_SSHORT[j] | SQLSMALLINT | short int |
SQL_C_USHORT[j] | SQLUSMALLINT | bez znaménka s krátkým rukopisem |
SQL_C_SLONG[j] | SQLINTEGER | dlouhé int |
SQL_C_ULONG[j] | SQLUINTEGER | bez znaménka dlouhého rukopisu |
SQL_C_FLOAT | SQLREAL | plout |
SQL_C_DOUBLE | SQLDOUBLE, SQLFLOAT | dvojitý |
SQL_C_BIT | SQLCHAR | znak bez znaménka |
SQL_C_STINYINT[j] | SQLSCHAR | podepsaný znak |
SQL_C_UTINYINT[j] | SQLCHAR | znak bez znaménka |
SQL_C_SBIGINT | SQLBIGINT | _int64[h] |
SQL_C_UBIGINT | SQLUBIGINT | nepodepsaný _int64[h] |
SQL_C_BINARY | SQLCHAR * | znak bez znaménka * |
SQL_C_BOOKMARK[i] | ZÁLOŽKA | bez znaménka dlouhého int[d] |
SQL_C_VARBOOKMARK | SQLCHAR * | znak bez znaménka * |
Všechny datové typy intervalů jazyka C | SQL_INTERVAL_STRUCT | Viz část Struktura intervalů jazyka C dále v tomto dodatku. |
identifikátor typu C SQL_C_TYPE_DATE[c]
SQL_DATE_STRUCT ODBC C typedef
typu C
struct tagDATE_STRUCT {
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
} DATE_STRUCT;[a]
identifikátor typu C SQL_C_TYPE_TIME[c]
SQL_TIME_STRUCT ODBC C typedef
typu C
struct tagTIME_STRUCT {
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
} TIME_STRUCT;[a]
identifikátor typu C SQL_C_TYPE_TIMESTAMP[c]
SQL_TIMESTAMP_STRUCT ODBC C typedef
typu C
struct tagTIMESTAMP_STRUCT {
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
SQLUINTEGER fraction;[b]
} TIMESTAMP_STRUCT;[a]
identifikátor typu C SQL_C_NUMERIC
SQL_NUMERIC_STRUCT ODBC C typedef
typu C
struct tagSQL_NUMERIC_STRUCT {
SQLCHAR precision;
SQLSCHAR scale;
SQLCHAR sign[g];
SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f]
} SQL_NUMERIC_STRUCT;
identifikátor typu C SQL_C_GUID
ROZHRANÍ ODBC C typedef SQLGUID
typu C
struct tagSQLGUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} SQLGUID;[k]
[a] Hodnoty roku, měsíce, dne, hodiny, minuty a druhých polí v datových typech datetime C musí odpovídat omezením gregoriánského kalendáře. (Viz Omezení gregoriánského kalendáře dále v tomto dodatku.)
[b] Hodnota pole zlomku je počet miliard sekund a pohybuje se od 0 do 999 999 999 999 (1 méně než 1 miliarda). Například hodnota pole zlomku pro půl sekundu je 500 000 000, pro tisícinu sekundy (jedna milisekunda) je 1 000 000, pro milion sekundy (jedna mikrosekunda) je 1 000 a pro miliardu sekundy (jedna nanosekunda) je 1.
[c] V rozhraní ODBC 2.x, datové typy C datum, čas a časové razítko jsou SQL_C_DATE, SQL_C_TIME a SQL_C_TIMESTAMP.
[d] Aplikace ODBC 3*.x* by měly používat SQL_C_VARBOOKMARK, nikoli SQL_C_BOOKMARK. Když aplikace ODBC 3*.x* funguje s rozhraním ODBC 2.x ovladač, správce ovladačů ODBC 3*.x* mapuje SQL_C_VARBOOKMARK na SQL_C_BOOKMARK.
[e] Číslo je uloženo v poli val struktury SQL_NUMERIC_STRUCT jako celočíselné číslo v malém endovském režimu (nejvíce bajtů vlevo je nejmenší bajt). Například číslo 10,001 base 10 s měřítkem 4 se škáluje na celé číslo 100010. Protože je to 186AA v šestnáctkovém formátu, hodnota v SQL_NUMERIC_STRUCT by byla "AA 86 01 00 00 ... 00" s počtem bajtů definovaných SQL_MAX_NUMERIC_LEN #define.
Další informace o SQL_NUMERIC_STRUCTnaleznete v tématu POSTUPY: Načítání číselných dat pomocí SQL_NUMERIC_STRUCT.
[f] Pole přesnosti a měřítka datového typu SQL_C_NUMERIC se používají pro vstup z aplikace a pro výstup z ovladače do aplikace. Když ovladač zapíše číselnou hodnotu do SQL_NUMERIC_STRUCT, použije jako hodnotu pole přesnosti přesnosti hodnotu vlastního ovladače a použije hodnotu v poli SQL_DESC_SCALE popisovače aplikace (výchozí hodnota 0) pro pole měřítko. Aplikace může zadat vlastní hodnoty pro přesnost a měřítko nastavením SQL_DESC_PRECISION a SQL_DESC_SCALE polí popisovače aplikace.
[g] Pole znaménka je 1, pokud je kladné, 0, pokud je záporné.
[h] _int64 nemusí být dodány některými kompilátory.
[i] _SQL_C_BOOKMARK byla v rozhraní ODBC 3*.x* zastaralá.
[j] _SQL_C_SHORT, SQL_C_LONG a SQL_C_TINYINT byly v rozhraní ODBC nahrazeny podepsanými a nepodepsanými typy: SQL_C_SSHORT a SQL_C_USHORT, SQL_C_SLONG a SQL_C_ULONG a SQL_C_STINYINT a SQL_C_UTINYINT. Ovladač ODBC 3*.x*, který by měl fungovat s rozhraním ODBC 2.x aplikace by měly podporovat SQL_C_SHORT, SQL_C_LONG a SQL_C_TINYINT, protože když jsou volána, správce ovladačů je předává ovladači.
[k] SQL_C_GUID lze převést pouze na SQL_CHAR nebo SQL_WCHAR.
Tato část obsahuje následující téma.
Viz také
datové typy C v rozhraní ODBC