Dela via


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.

Se även

C-datatyper i ODBC