C-datatyper
ODBC C-datatyper anger datatypen för C-buffertar som används för att lagra data i programmet.
Alla drivrutiner måste ha stöd för alla C-datatyper. Detta krävs eftersom alla drivrutiner måste ha stöd för alla C-typer som SQL-typer som de stöder kan konverteras till, och alla drivrutiner stöder minst en SQL-typ av tecken. Eftersom sql-tecknet kan konverteras till och från alla C-typer måste alla drivrutiner ha stöd för alla C-typer.
C-datatypen anges i SQLBindCol- och SQLGetData funktioner med argumentet TargetType och i SQLBindParameter-funktionen med argumentet ValueType. Det kan också anges genom att anropa SQLSetDescField för att ange fältet SQL_DESC_CONCISE_TYPE för en ARD eller APD. eller genom att anropa SQLSetDescRec med argumentet Type (och argumentet SubType om det behövs) och argumentet DescriptorHandle som är inställt på handtaget för en ARD eller APD.
I följande tabeller visas giltiga typidentifierare för C-datatyperna. Tabellen visar också den ODBC C-datatyp som motsvarar varje identifierare och definitionen av den här datatypen.
C-typidentifierare | ODBC C typedef | C-typ |
---|---|---|
SQL_C_CHAR | SQLCHAR * | osignerat tecken * |
SQL_C_WCHAR | SQLWCHAR * | wchar_t * |
SQL_C_SSHORT[j] | SQLSMALLINT | kort int |
SQL_C_USHORT[j] | SQLUSMALLINT | osignerad kort int |
SQL_C_SLONG[j] | SQLINTEGER | lång int |
SQL_C_ULONG[j] | SQLUINTEGER | osignerad lång int |
SQL_C_FLOAT | SQLREAL | flyta |
SQL_C_DOUBLE | SQLDOUBLE, SQLFLOAT | dubbel |
SQL_C_BIT | SQLCHAR | osignerat tecken |
SQL_C_STINYINT[j] | SQLSCHAR | signerat tecken |
SQL_C_UTINYINT[j] | SQLCHAR | osignerat tecken |
SQL_C_SBIGINT | SQLBIGINT | _int64[h] |
SQL_C_UBIGINT | SQLUBIGINT | osignerad _int64[h] |
SQL_C_BINARY | SQLCHAR * | osignerat tecken * |
SQL_C_BOOKMARK[i] | BOKMÄRKE | osignerad lång int[d] |
SQL_C_VARBOOKMARK | SQLCHAR * | osignerat tecken * |
Alla C-intervalldatatyper | SQL_INTERVAL_STRUCT | Se avsnittet C-intervallstruktur senare i den här bilagan. |
C-typidentifierare SQL_C_TYPE_DATE[c]
ODBC C typedef SQL_DATE_STRUCT
C-typ
struct tagDATE_STRUCT {
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
} DATE_STRUCT;[a]
C-typidentifierare SQL_C_TYPE_TIME[c]
ODBC C typedef SQL_TIME_STRUCT
C-typ
struct tagTIME_STRUCT {
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
} TIME_STRUCT;[a]
C-typidentifierare SQL_C_TYPE_TIMESTAMP[c]
ODBC C typedef SQL_TIMESTAMP_STRUCT
C-typ
struct tagTIMESTAMP_STRUCT {
SQLSMALLINT year;
SQLUSMALLINT month;
SQLUSMALLINT day;
SQLUSMALLINT hour;
SQLUSMALLINT minute;
SQLUSMALLINT second;
SQLUINTEGER fraction;[b]
} TIMESTAMP_STRUCT;[a]
C-typidentifierare SQL_C_NUMERIC
ODBC C typedef SQL_NUMERIC_STRUCT
C-typ
struct tagSQL_NUMERIC_STRUCT {
SQLCHAR precision;
SQLSCHAR scale;
SQLCHAR sign[g];
SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f]
} SQL_NUMERIC_STRUCT;
C-typidentifierare SQL_C_GUID
ODBC C typedef SQLGUID
C-typ
struct tagSQLGUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} SQLGUID;[k]
[a] Värdena för fälten år, månad, dag, timme, minut och sekund i datatyperna datetime C måste överensstämma med begränsningarna i den gregorianska kalendern. (Se begränsningar i den gregorianska kalendern senare i den här bilagan.)
[b] Värdet för bråkfältet är antalet miljarder av en sekund och sträcker sig från 0 till 999 999 999 (1 mindre än 1 miljard). Till exempel är värdet för bråkfältet för en halv sekund 500 000 000, för en tusendel av en sekund (en millisekunder) är 1 000 000, för en miljondel av en sekund (en mikrosekunder) är 1 000 och för en miljarddel av en sekund (en nanosekund) är 1.
[c] I ODBC 2.xär datatyperna C-datum, tid och tidsstämpel SQL_C_DATE, SQL_C_TIME och SQL_C_TIMESTAMP.
[d] ODBC 3*.x* program ska använda SQL_C_VARBOOKMARK, inte SQL_C_BOOKMARK. När ett ODBC 3*.x*-program fungerar med en ODBC 2.x drivrutin mappar ODBC 3*.x* Driver Manager SQL_C_VARBOOKMARK till SQL_C_BOOKMARK.
[e] Ett tal lagras i fältet val i SQL_NUMERIC_STRUCT struktur som ett skalat heltal, i lite endianskt läge (den vänstra byte är den minst signifikanta byte). Till exempel skalas talet 10.001 bas 10, med en skala på 4, till ett heltal på 100010. Eftersom detta är 186AA i hexadecimalt format skulle värdet i SQL_NUMERIC_STRUCT vara "AA 86 01 00 00 ... 00", med antalet byte som definierats av SQL_MAX_NUMERIC_LEN #define.
Mer information om SQL_NUMERIC_STRUCTfinns i HOWTO: Hämta numeriska data med SQL_NUMERIC_STRUCT.
[f] Precisions- och skalningsfälten för den SQL_C_NUMERIC datatypen används för indata från ett program och för utdata från drivrutinen till programmet. När drivrutinen skriver ett numeriskt värde i SQL_NUMERIC_STRUCT använder den sin egen drivrutinsspecifika standard som värde för fältet precision och använder värdet i fältet SQL_DESC_SCALE i programbeskrivningen (som standard är 0) för skala fält. Ett program kan ange sina egna värden för precision och skalning genom att ange fälten SQL_DESC_PRECISION och SQL_DESC_SCALE i programbeskrivningen.
[g] Teckenfältet är 1 om det är positivt, 0 om det är negativt.
[h] _int64 kanske inte tillhandahålls av vissa kompilatorer.
[i] _SQL_C_BOOKMARK har blivit inaktuell i ODBC 3*.x*.
[j] _SQL_C_SHORT, SQL_C_LONG och SQL_C_TINYINT har ersatts i ODBC av signerade och osignerade typer: SQL_C_SSHORT och SQL_C_USHORT, SQL_C_SLONG och SQL_C_ULONG samt SQL_C_STINYINT och SQL_C_UTINYINT. En ODBC 3*.x*-drivrutin som ska fungera med ODBC 2.x program bör ha stöd för SQL_C_SHORT, SQL_C_LONG och SQL_C_TINYINT, eftersom drivrutinshanteraren skickar dem till drivrutinen när de anropas.
[k] SQL_C_GUID kan bara konverteras till SQL_CHAR eller SQL_WCHAR.
Det här avsnittet innehåller följande avsnitt.