C-Datentypen
ODBC C-Datentypen geben den Datentyp von C-Puffern 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 SQL-Typen konvertiert werden können, und alle Treiber unterstützen mindestens einen SQL-Zeichentyp. Da der SQL-Zeichentyp in und von allen C-Typen konvertiert werden kann, müssen alle Treiber alle C-Typen unterstützen.
Der Datentyp C wird im SQLBindCol- und SQLGetData--Funktionen mit dem Argument TargetType und in der SQLBindParameter- funktion mit dem argument ValueType angegeben. Sie kann auch durch Aufrufen von SQLSetDescField- angegeben werden, um das SQL_DESC_CONCISE_TYPE Feld eines ARD- oder APD festzulegen, oder durch Aufrufen SQLSetDescRec mit dem Argument Type Argument (und dem SubType Argument bei Bedarf) und dem argument DescriptorHandle argument set to the handle of an ARD oder APD.
In den folgenden Tabellen sind gültige Typbezeichner für die C-Datentypen aufgeführt. In der Tabelle werden auch der ODBC-C-Datentyp aufgeführt, der den einzelnen Bezeichnern und der Definition dieses Datentyps entspricht.
C-Typbezeichner | ODBC-C-Typdef | C-Typ |
---|---|---|
SQL_C_CHAR | SQLCHAR * | nicht signiertes Zeichen * |
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 | schweben |
SQL_C_DOUBLE | SQLDOUBLE, SQLFLOAT | doppelt |
SQL_C_BIT | SQLCHAR | Nicht signiertes Zeichen |
SQL_C_STINYINT[j] | SQLSCHAR | signiertes Zeichen |
SQL_C_UTINYINT[j] | SQLCHAR | Nicht signiertes Zeichen |
SQL_C_SBIGINT | SQLBIGINT | _int64[h] |
SQL_C_UBIGINT | SQLUBIGINT | nicht signierte _int64[h] |
SQL_C_BINARY | SQLCHAR * | nicht signiertes Zeichen * |
SQL_C_BOOKMARK[i] | LESEZEICHEN | unsigned long int[d] |
SQL_C_VARBOOKMARK | SQLCHAR * | nicht signiertes Zeichen * |
Alle C-Intervall-Datentypen | SQL_INTERVAL_STRUCT | Weitere Informationen finden Sie im Abschnitt C-Intervallstruktur weiter unten in diesem Anhang. |
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 typedef SQLGUID
C-Typ
struct tagSQLGUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} SQLGUID;[k]
[a] Die Werte des Datentyps "Jahr", "Monat", "Tag", "Stunde", "Minute" und "sekunde" 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 Milliarden pro Sekunde und reicht von 0 bis 999.999.999 (1 unter 1 Milliarde). Beispielsweise ist der Wert des Bruchfelds für eine halbe Sekunde 500.000.000, für ein Tausendstel einer Sekunde (eine Millisekunden) 1.000.000, für einen Millionstel einer Sekunde (ein Mikrosekunden) 1.000, und für einen Milliardenstel einer Sekunde (ein Nanosekunden) ist 1.
[c] In ODBC 2.xsind die Datentypen C-Datum, Uhrzeit und Zeitstempel 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 einem ODBC 2 funktioniert.x Treiber wird der ODBC 3*.x*-Treiber-Manager SQL_C_VARBOOKMARK SQL_C_BOOKMARK zugeordnet.
[e] Eine Zahl wird im Val Feld der SQL_NUMERIC_STRUCT Struktur als skalierte ganze Zahl gespeichert, im kleinen Endmodus (das äußerst linke Byte ist das am wenigsten signifikante Byte). Beispielsweise wird die Zahl 10,001 Basis 10 mit einer Skalierung von 4 auf eine ganze Zahl von 100010 skaliert. Da dies 186AA im Hexadezimalformat ist, lautet der Wert in SQL_NUMERIC_STRUCT "AA 86 01 00 00 ... 00", mit der Anzahl der by der SQL_MAX_NUMERIC_LEN #definedefinierten Bytes.
Weitere Informationen zu SQL_NUMERIC_STRUCTfinden Sie unter HOWTO: Abrufen numerischer Daten mit SQL_NUMERIC_STRUCT.
[f] Die Genauigkeits- und Skalierungsfelder des datentyps SQL_C_NUMERIC werden für eingaben aus einer Anwendung und für die Ausgabe des Treibers in die Anwendung verwendet. Wenn der Treiber einen numerischen Wert in das SQL_NUMERIC_STRUCT schreibt, verwendet er einen eigenen treiberspezifischen Standardwert als Wert für das feld Genauigkeit und verwendet den Wert im feld SQL_DESC_SCALE der Anwendungsbeschreibung (standard 0) für das Skalierungsfeld Feld. Eine Anwendung kann eigene Werte für Genauigkeit und Skalierung bereitstellen, indem sie die Felder SQL_DESC_PRECISION und SQL_DESC_SCALE der Anwendungsbeschreibung festlegen.
[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 soll.x--Anwendungen sollten SQL_C_SHORT, SQL_C_LONG und SQL_C_TINYINT unterstützen, da der Treiber-Manager sie beim Aufrufen an den Treiber weitergibt.
[k] SQL_C_GUID kann nur in SQL_CHAR oder SQL_WCHAR konvertiert werden.
Dieser Abschnitt enthält das folgende Thema.