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: