Megosztás a következőn keresztül:


C adattípusok

Az ODBC C adattípusok az alkalmazás adatainak tárolására használt C pufferek adattípusát jelzik.

Minden illesztőprogramnak támogatnia kell az összes C adattípust. Erre azért van szükség, mert minden illesztőprogramnak támogatnia kell az összes C típust, amelybe az általuk támogatott SQL-típusok konvertálhatók, és minden illesztőprogram legalább egy karakteres SQL-típust támogat. Mivel az SQL karaktertípus az összes C típusból és típusból konvertálható, minden illesztőnek támogatnia kell az összes C típust.

A C adattípus a SQLBindCol és SQLGetData függvényben van megadva a TargetType argumentummal, valamint a SQLBindParameter függvényben a ValueType argumentummal. Megadható úgy is, hogy meghívja SQLSetDescField egy ARD vagy APD SQL_DESC_CONCISE_TYPE mezőjének beállításához, vagy meghívhatja SQLSetDescRec a Type argumentummal (és szükség esetén a SubType argumentummal), valamint az DescriptorHandle argumentumot egy ARD vagy APD leírójára.

Az alábbi táblázatok a C adattípusok érvényes típusazonosítóit sorolják fel. A táblázat az egyes azonosítóknak és az adattípus definíciójának megfelelő ODBC C adattípust is felsorolja.

C típusazonosító ODBC C typedef C típus
SQL_C_CHAR SQLCHAR * aláíratlan karakter *
SQL_C_WCHAR SQLWCHAR * wchar_t *
SQL_C_SSHORT[j] SQLSMALLINT rövid int
SQL_C_USHORT[j] SQLUSMALLINT aláíratlan rövid int
SQL_C_SLONG[j] SQLINTEGER hosszú int
SQL_C_ULONG[j] SQLUINTEGER aláíratlan hosszú int
SQL_C_FLOAT SQLREAL lebeg
SQL_C_DOUBLE SQLDOUBLE, SQLFLOAT dupla
SQL_C_BIT SQLCHAR aláíratlan karakter
SQL_C_STINYINT[j] SQLSCHAR aláírt karakter
SQL_C_UTINYINT[j] SQLCHAR aláíratlan karakter
SQL_C_SBIGINT SQLBIGINT _int64[h]
SQL_C_UBIGINT SQLUBIGINT aláíratlan _int64[h]
SQL_C_BINARY SQLCHAR * aláíratlan karakter *
SQL_C_BOOKMARK[i] KÖNYVJELZŐ aláíratlan hosszú int[d]
SQL_C_VARBOOKMARK SQLCHAR * aláíratlan karakter *
Minden C intervallum adattípus SQL_INTERVAL_STRUCT Tekintse meg a C intervallumstruktúra szakaszt a függelék későbbi részében.

C típusazonosító SQL_C_TYPE_DATE[c]

ODBC C typedef SQL_DATE_STRUCT

C típusú

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

C típusazonosító SQL_C_TYPE_TIME[c]

ODBC C typedef SQL_TIME_STRUCT

C típusú

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

C típusazonosító SQL_C_TYPE_TIMESTAMP[c]

ODBC C typedef SQL_TIMESTAMP_STRUCT

C típusú

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

C típusazonosító SQL_C_NUMERIC

ODBC C typedef SQL_NUMERIC_STRUCT

C típusú

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

C típusazonosító SQL_C_GUID

ODBC C typedef SQLGUID

C típusú

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

[a] A datetime C adattípusok év, hónap, nap, óra, perc és második mezőinek meg kell felelniük a Gergely-naptár korlátainak. (A függelék későbbi részében Gergely-naptár korlátozásai.)

[b] A törtmező értéke a másodperc milliárdosainak száma, és 0 és 999 999 999 közötti (1 milliárdnál kevesebb). Egy fél másodperc törtmezőjének értéke például 500 000 000, ezredmásodpercben (ezredmásodpercben) 1 000 000, egy másodperc milliomod része (egy mikroszekundum) 1000, a másodperc egymilliárdoda (egy nanoszekundum) pedig 1.

[c] Az ODBC 2-ben.x, a C dátum, idő és időbélyeg adattípus SQL_C_DATE, SQL_C_TIME és SQL_C_TIMESTAMP.

[d] Az ODBC 3*.x* alkalmazásoknak SQL_C_VARBOOKMARK kell használniuk, nem SQL_C_BOOKMARK. Ha egy ODBC 3*.x* alkalmazás egy ODBC 2-vel működik.x illesztőprogramot az ODBC 3*.x* illesztőprogram-kezelő SQL_C_VARBOOKMARK SQL_C_BOOKMARK.

[e] A szám a SQL_NUMERIC_STRUCT szerkezet val mezőjében van tárolva skálázott egész számként, kis endian módban (a bal szélső bájt a legkevésbé jelentős bájt). A 10.001 alap 10 szám például 4-es skálával 100010 egész számra van skálázva. Mivel ez 186AA hexadecimális formátumban, az érték SQL_NUMERIC_STRUCT lenne "AA 86 01 00 00 ... 00", a SQL_MAX_NUMERIC_LEN #defineáltal meghatározott bájtok számával.

A SQL_NUMERIC_STRUCTtovábbi információ: HOWTO: Numerikus adatok beolvasása SQL_NUMERIC_STRUCT.

[f] A SQL_C_NUMERIC adattípus pontossági és skálázási mezői az alkalmazásból történő bemenethez és az illesztőtől az alkalmazáshoz való kimenethez használatosak. Amikor az illesztő numerikus értéket ír a SQL_NUMERIC_STRUCT, a pontossági mező értékeként saját illesztőprogram-specifikus alapértelmezett értéket használ, és az alkalmazásleíró SQL_DESC_SCALE mezőjében lévő értéket használja (amely alapértelmezés szerint 0) a skálázási mezőhöz. Az alkalmazások az alkalmazásleíró SQL_DESC_PRECISION és SQL_DESC_SCALE mezőinek beállításával saját értékeket adhatnak meg a pontossághoz és a skálázáshoz.

[g] A jelmező 1, ha pozitív, 0, ha negatív.

[h] előfordulhat, hogy egyes fordítók nem _int64.

[i] _SQL_C_BOOKMARK elavult az ODBC 3*.x*-ban.

[j] _SQL_C_SHORT, SQL_C_LONG és SQL_C_TINYINT az ODBC-ben aláírt és aláíratlan típusok váltották fel: SQL_C_SSHORT és SQL_C_USHORT, SQL_C_SLONG és SQL_C_ULONG, valamint SQL_C_STINYINT és SQL_C_UTINYINT. OdBC 3*.x* illesztőprogram, amelynek az ODBC 2-vel kell működnie.x-alkalmazásoknak támogatniuk kell SQL_C_SHORT, SQL_C_LONG és SQL_C_TINYINT, mert amikor meghívják őket, az Illesztőprogram-kezelő átadja őket az illesztőprogramnak.

[k] SQL_C_GUID csak SQL_CHAR vagy SQL_WCHAR konvertálható.

Ez a szakasz az alábbi témakört tartalmazza.

Lásd még:

C-adattípusok az ODBC