Sdílet prostřednictvím


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