C-Datentypen

ODBC C-Datentypen geben den Datentyp der C-Puffer an, die zum Speichern von Daten in der Anwendung verwendet werden.

Alle Treiber müssen alle C-Datentypen unterstützen. Dies ist erforderlich, da alle Treiber alle C-Typen unterstützen müssen, in die von ihnen unterstützte SQL-Typen konvertiert werden können, und alle Treiber mindestens einen SQL-Zeichentyp unterstützen. Da der SQL-Zeichentyp in und aus allen C-Typen konvertiert werden kann, müssen alle Treiber alle C-Typen unterstützen.

Der C-Datentyp wird in den Funktionen SQLBindCol und SQLGetData mit dem Argument TargetType und in der SQLBindParameter-Funktion mit dem ValueType-Argument angegeben. Es kann auch durch Aufrufen von SQLSetDescField angegeben werden, um das SQL_DESC_CONCISE_TYPE Feld einer ARD- oder APD festzulegen, oder durch Aufrufen von SQLSetDescRec mit dem Argument Type (und dem SubType-Argument bei Bedarf) und dem DescriptorHandle-Argument , das auf das Handle einer ARD- oder APD festgelegt ist.

In den folgenden Tabellen sind gültige Typbezeichner für die C-Datentypen aufgeführt. Die Tabelle enthält auch den ODBC C-Datentyp, der den einzelnen Bezeichnern und der Definition dieses Datentyps entspricht.

C-Typbezeichner ODBC C-Typdef C-Typ
SQL_C_CHAR SQLCHAR* unsigned char *
SQL_C_WCHAR SQLWCHAR * wchar_t *
SQL_C_SSHORT[j] SQLSMALLINT short int
SQL_C_USHORT[j] SQLUSMALLINT unsigned short int
SQL_C_SLONG[j] SQLINTEGER long int
SQL_C_ULONG[j] SQLUINTEGER unsigned long int
SQL_C_FLOAT SQLREAL float
SQL_C_DOUBLE SQLDOUBLE, SQLFLOAT double
SQL_C_BIT SQLCHAR unsigned char
SQL_C_STINYINT[j] SQLSCHAR char mit Vorzeichen
SQL_C_UTINYINT[j] SQLCHAR unsigned char
SQL_C_SBIGINT SQLBIGINT _int64[h]
SQL_C_UBIGINT SQLUBIGINT nicht signierter _int64[h]
SQL_C_BINARY SQLCHAR* unsigned char *
SQL_C_BOOKMARK[i] LESEZEICHEN unsigned long int[d]
SQL_C_VARBOOKMARK SQLCHAR* unsigned char *
Alle C-Intervalldatentypen SQL_INTERVAL_STRUCT Weitere Informationen finden Sie weiter unten in diesem Anhang im Abschnitt C-Intervallstruktur .

C-Typbezeichner SQL_C_TYPE_DATE[c]

ODBC C-Typdef SQL_DATE_STRUCT

C-Typ

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

C-Typbezeichner SQL_C_TYPE_TIME[c]

ODBC C-Typdef SQL_TIME_STRUCT

C-Typ

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

C-Typbezeichner SQL_C_TYPE_TIMESTAMP[c]

ODBC C-Typdef 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-Typbezeichner SQL_C_NUMERIC

ODBC C-Typdef 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-Typbezeichner SQL_C_GUID

ODBC C-Typdef SQLGUID

C-Typ

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

[a] Die Werte der Felder Jahr, Monat, Tag, Stunde, Minute und second in den Datentypen datetime C müssen den Einschränkungen des gregorianischen Kalenders entsprechen. (Siehe Einschränkungen des gregorianischen Kalenders weiter unten in diesem Anhang.)

[b] Der Wert des Bruchfelds ist die Anzahl der Milliardstel sekunden und reicht von 0 bis 999.999.999 (1 kleiner als 1 Milliarde). Beispielsweise ist der Wert des Bruchfelds für eine halbe Sekunde 500.000.000, für eine Tausendstelsekunde (eine Millisekunde) 1.000.000, für eine Millionstel Sekunde (eine Mikrosekunde) 1.000 und für eine Milliardstel Sekunde (eine Nanosekunde) 1.

[c] In ODBC 2. x, die Datentypen C-Datum, Uhrzeit und Zeitstempel sind SQL_C_DATE, SQL_C_TIME und SQL_C_TIMESTAMP.

[d] ODBC 3*.x**-Anwendungen sollten SQL_C_VARBOOKMARK und nicht SQL_C_BOOKMARK verwenden. Wenn eine ODBC 3*.x*-Anwendung mit odbc 2 funktioniert. x-Treiber , der ODBC 3*.x*-Treiber-Manager zuordnen SQL_C_VARBOOKMARK SQL_C_BOOKMARK.

[e] Eine Zahl wird im Wertfeld der SQL_NUMERIC_STRUCT-Struktur als skalierte ganze Zahl im Little-Endian-Modus gespeichert (das linksste Byte ist das byte mit der geringsten Bedeutung). Beispielsweise wird die Zahl 10.001 Basis 10 mit einer Skala von 4 auf eine ganze Zahl von 100010 skaliert. Da dies 186AA im Hexadezimalformat ist, wäre der Wert in SQL_NUMERIC_STRUCT "AA 86 01 00 00 ... 00", mit der Anzahl von Bytes, die vom SQL_MAX_NUMERIC_LEN #define definiert wird.

Weitere Informationen zu SQL_NUMERIC_STRUCT finden Sie unter HOWTO: Abrufen numerischer Daten mit SQL_NUMERIC_STRUCT.

[f] Die Genauigkeits- und Skalierungsfelder des SQL_C_NUMERIC Datentyps werden für die Eingabe aus einer Anwendung und für die Ausgabe vom Treiber an die Anwendung verwendet. Wenn der Treiber einen numerischen Wert in die SQL_NUMERIC_STRUCT schreibt, verwendet er seinen eigenen treiberspezifischen Standardwert als Wert für das Genauigkeitsfeld , und er verwendet den Wert im Feld SQL_DESC_SCALE des Anwendungsdeskriptors (standardmäßig 0) für das Skalierungsfeld . Eine Anwendung kann eigene Werte für Genauigkeit und Skalierung bereitstellen, indem sie die SQL_DESC_PRECISION und SQL_DESC_SCALE Felder des Anwendungsdeskriptors festlegt.

[g] Das Vorzeichenfeld ist 1, wenn positiv, 0, wenn negativ.

[h] _int64 werden möglicherweise nicht von einigen Compilern bereitgestellt.

[i] _SQL_C_BOOKMARK in ODBC 3*.x* veraltet ist.

[j] _SQL_C_SHORT, SQL_C_LONG und SQL_C_TINYINT wurden in ODBC durch signierte und nicht signierte Typen ersetzt: SQL_C_SSHORT und SQL_C_USHORT, SQL_C_SLONG und SQL_C_ULONG sowie SQL_C_STINYINT und SQL_C_UTINYINT. Ein ODBC 3*.x*-Treiber, der mit ODBC 2 funktionieren sollte. x-Anwendungen sollten SQL_C_SHORT, SQL_C_LONG und SQL_C_TINYINT unterstützen, da sie beim Aufruf vom Treiber-Manager an den Treiber übergeben werden.

[k] SQL_C_GUID können nur in SQL_CHAR oder SQL_WCHAR konvertiert werden.

Dieser Abschnitt enthält das folgende Thema:

Weitere Informationen

C-Datentypen in ODBC