C-Datentypen in ODBC

ODBC definiert die C-Datentypen, die von Anwendungsvariablen und den entsprechenden Typbezeichnern verwendet werden. Diese werden von den Puffern verwendet, die an Resultsetspalten und Anweisungsparameter gebunden sind. Angenommen, eine Anwendung möchte Daten aus einer Resultsetspalte im Zeichenformat abrufen. Sie deklariert eine Variable mit dem SQLCHAR *-Datentyp und bindet diese Variable an die Resultsetspalte mit einem Typbezeichner von SQL_C_CHAR. Eine vollständige Liste der C-Datentypen und Typbezeichner finden Sie in Anhang D: Datentypen.

ODBC definiert außerdem eine Standardzuordnung von jedem SQL-Datentyp zu einem C-Datentyp. Beispielsweise wird eine 2-Byte-Ganzzahl in der Datenquelle einer 2-Byte-Ganzzahl in der Anwendung zugeordnet. Um die Standardzuordnung zu verwenden, gibt eine Anwendung den SQL_C_DEFAULT Typbezeichner an. Die Verwendung dieses Bezeichners wird jedoch aus Interoperabilitätsgründen abgeraten.

Alle in ODBC 1.x definierten ganzzahligen C-Datentypen wurden signiert. Nicht signierte C-Datentypen und die entsprechenden Typbezeichner wurden in ODBC 2.0 hinzugefügt. Daher müssen Anwendungen und Treiber beim Umgang mit 1.x-Versionen besonders vorsichtig sein.

Erweiterbarkeit des C-Datentyps

In ODBC 3.8 können Sie treiberspezifische C-Datentypen angeben. Auf diese Weise können Sie einen SQL-Typ als treiberspezifischen C-Typ in ODBC-Anwendungen binden, wenn Sie SQLBindCol, SQLGetData oder SQLBindParameter aufrufen. Dies kann nützlich sein, um neue Servertypen zu unterstützen, da vorhandene C-Datentypen möglicherweise nicht ordnungsgemäß die neuen Serverdatentypen darstellen. Die Verwendung treiberspezifischer C-Typen kann die Anzahl der Konvertierungen erhöhen, die Treiber ausführen können.

Angenommen, ein Datenbankverwaltungssystem (DBMS) hat einen neuen SQL-Typ , DATETIMEOFFSET, eingeführt, um das Datum und die Uhrzeit mit Zeitzoneninformationen darzustellen. Es wäre kein bestimmter C-Typ in ODBC vorhanden, der DATETIMEOFFSET entspricht. Eine Anwendung müsste DATETIMEOFFSET als SQL_C_BINARY binden und in einen benutzerdefinierten Datentyp umwandeln. Ab ODBC 3.8 mit C-Datentyperweiterung kann ein Treiber einen neuen entsprechenden C-Typ definieren. For example, for the new SQL type DATETIMEOFFSET, the driver can define a new corresponding C type such as SQL_C_DATETIMEOFFSET. Anschließend kann eine Anwendung den neuen SQL-Typ als treiberspezifischen C-Typ binden.

Ein C-Datentyp wird im Treiber wie folgt definiert:

  • Die ODBC-Complianceebene für eine Anwendung, einen ODBC-Treiber und einen Treiber-Manager ist 3.8 (oder höher).

  • Der Datenbereich eines treiberspezifischen C-Typs liegt zwischen 0x4000 und 0x7FFF.

  • Der Treiber definiert die Struktur der Daten, die dem C-Typ entsprechen. Dies kann im treiberspezifischen SDK erfolgen.

Der Treibermanager überprüft keinen C-Typ, der im Bereich von 0x4000 und 0x7FFF definiert ist; der Treiber führt die Überprüfung und jede Datentypkonvertierung durch. Wenn der Datenbereich eines C-Typs, der an den Treiber-Manager übergeben wird, zwischen 0x0000 und 0x3FFF oder zwischen 0x8000 und 0xFFFF liegt, überprüft der Treibermanager jedoch den C-Datentyp.

Hinweis

Treiberspezifische C-Datentypen sollten in der Treiberdokumentation beschrieben werden.

Um eine ODBC-Kompatibilitätsebene von 3.8 anzugeben, ruft eine Anwendung SQLSetEnvAttr auf, wobei das SQL_ATTR_ODBC_VERSION Attribut auf SQL_OV_ODBC3_80 festgelegt ist. Um die Version des Treibers zu ermitteln, ruft eine Anwendung SQLGetInfo mit SQL_DRIVER_ODBC_VER auf.

Weitere Informationen zu ODBC 3.8 finden Sie unter What's New in ODBC 3.8.

Weitere Informationen

C-Datentypen