Konvertieren von Daten von SQL- zu C-Datentypen

Wenn eine Anwendung SQLFetch, SQLFetchScroll oder SQLGetData aufruft, ruft der Treiber die Daten aus der Datenquelle ab. Bei Bedarf konvertiert er die Daten aus dem Datentyp, in dem der Treiber sie in den durch das TargetType-Argument in SQLBindCol oder SQLGetData angegebenen Datentyp abgerufen hat. Schließlich werden die Daten an der Position gespeichert, auf die das Argument TargetValuePtr in SQLBindCol oder SQLGetData (und das SQL_DESC_DATA_PTR Feld der ARD) verweist.

Die folgende Tabelle zeigt die unterstützten Konvertierungen von ODBC SQL-Datentypen in ODBC-C-Datentypen. Ein gefüllter Kreis gibt die Standardkonvertierung für einen SQL-Datentyp an (der C-Datentyp, in den die Daten konvertiert werden, wenn der Wert von TargetType SQL_C_DEFAULT ist). Ein hohler Kreis gibt eine unterstützte Konvertierung an.

Für eine ODBC 3.x-Anwendung, die mit einem ODBC 2.x-Treiber arbeitet, wird die Konvertierung von treiberspezifischen Datentypen möglicherweise nicht unterstützt.

Das Format der konvertierten Daten wird von der Einstellung "Windows-Land/Region" nicht beeinflusst.

In den Tabellen in den folgenden Abschnitten wird beschrieben, wie der Treiber oder die Datenquelle Daten konvertiert, die aus der Datenquelle abgerufen wurden. Treiber sind erforderlich, um Konvertierungen in alle ODBC-C-Datentypen aus den von ihnen unterstützten ODBC-SQL-Datentypen zu unterstützen. Für einen bestimmten ODBC SQL-Datentyp listet die erste Spalte der Tabelle die gesetzlichen Eingabewerte des TargetType-Arguments in SQLBindCol und SQLGetData auf. In der zweiten Spalte werden die Ergebnisse eines Tests aufgelistet, häufig mit dem in SQLBindCol oder SQLGetData angegebenen Argument BufferLength, das der Treiber ausführt, um zu bestimmen, ob die Daten konvertiert werden können. Für jedes Ergebnis werden in den dritten und vierten Spalten die Werte aufgelistet, die in den durch den TargetValuePtr angegebenen Puffern und StrLen_or_IndPtr Argumenten aufgelistet werden, die in SQLBindCol oder SQLGetData angegeben sind, nachdem der Treiber versucht hat, die Daten zu konvertieren. (Die StrLen_or_IndPtr Argument entspricht dem SQL_DESC_OCTET_LENGTH_PTR Feld der ARD.) In der letzten Spalte wird der SQLSTATE aufgelistet, der für jedes Ergebnis von SQLFetch, SQLFetchScroll oder SQLGetData zurückgegeben wird.

Wenn das TargetType-Argument in SQLBindCol oder SQLGetData einen Bezeichner für einen ODBC-C-Datentyp enthält, der in der Tabelle für einen bestimmten ODBC SQL-Datentyp nicht angezeigt wird, gibt SQLFetch, SQLFetchScroll oder SQLGetData SQLSTATE 07006 zurück (Eingeschränkter Datentypattributverstoß). Wenn das TargetType-Argument einen Bezeichner enthält, der eine Konvertierung von einem treiberspezifischen SQL-Datentyp in einen ODBC C-Datentyp angibt und diese Konvertierung vom Treiber nicht unterstützt wird, gibt SQLFetch, SQLFetchScroll oder SQLGetData SQLSTATE HYC00 zurück (Optionales Feature nicht implementiert).

Obwohl er in den Tabellen nicht angezeigt wird, gibt der Treiber SQL_NULL_DATA im durch das argument StrLen_or_IndPtr angegebenen Puffer zurück, wenn der SQL-Datenwert NULL ist. Eine Erläuterung der Verwendung von StrLen_or_IndPtr, wenn mehrere Aufrufe zum Abrufen von Daten durchgeführt werden, finden Sie in der BESCHREIBUNG der SQLGetData-Funktion. Wenn SQL-Daten in Zeichen-C-Daten konvertiert werden, enthält die in *StrLen_or_IndPtr zurückgegebene Zeichenanzahl nicht das Byte mit null-Beendigung. Wenn TargetValuePtr ein Nullzeiger ist, gibt SQLGetData SQLSTATE HY009 (Ungültige Verwendung von Nullzeiger) zurück. In SQLBindCol wird die Spalte dadurch aufgehoben.

Die folgenden Begriffe und Konventionen werden in den Tabellen verwendet:

  • Die Bytelänge der Daten ist die Anzahl der Bytes von C-Daten, die in *TargetValuePtr zurückgegeben werden können, unabhängig davon, ob die Daten abgeschnitten werden, bevor sie an die Anwendung zurückgegeben werden. Bei Zeichenfolgendaten enthält dies nicht das Leerzeichen für das Nullendpunkt.

  • Die Zeichenbytelänge ist die Gesamtanzahl der Bytes, die zum Anzeigen der Daten im Zeichenformat erforderlich sind. Dies ist für jeden C-Datentyp im Abschnitt "Anzeigegröße" definiert, mit der Ausnahme, dass die Zeichenbytelänge in Byte liegt, während die Anzeigegröße in Zeichen liegt.

  • Wörter in Kursiv stellen Funktionsargumente oder Elemente der SQL-Grammatik dar. Die Syntax von Grammatikelementen finden Sie in Anhang C: SQL Grammar.

In diesem Abschnitt werden die folgenden Themen behandelt: