Konvertieren von Daten von C- zu SQL-Datentypen

Wenn eine Anwendung SQLExecute oder SQLExecDirect aufruft, ruft der Treiber die Daten für alle Parameter ab, die an SQLBindParameter gebunden sind, aus Speicherorten in der Anwendung. Wenn eine Anwendung SQLSetPos aufruft, ruft der Treiber die Daten für ein Update- oder Add-Vorgang aus Spalten ab, die mit SQLBindCol gebunden sind. Bei Daten bei Ausführungsparametern sendet die Anwendung die Parameterdaten mit SQLPutData. Bei Bedarf konvertiert der Treiber die Daten aus dem Datentyp, der durch das ValueType-Argument in SQLBindParameter angegeben wird, in den Datentyp, der durch das ParameterType-Argument in SQLBindParameter angegeben wird, und sendet dann die Daten an die Datenquelle.

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

Das Format der konvertierten Daten ist von der Windows-Länder- oder Regionseinstellung nicht betroffen.

Supported conversions: ODBC C to SQL data types

In den Tabellen in den folgenden Abschnitten wird beschrieben, wie der Treiber oder die Datenquelle Daten konvertiert, die an die Datenquelle gesendet werden. Treiber sind erforderlich, um Konvertierungen von allen ODBC-C-Datentypen in die von ihnen unterstützten ODBC-SQL-Datentypen zu unterstützen. Für einen bestimmten ODBC-C-Datentyp listet die erste Spalte der Tabelle die zulässigen Eingabewerte des ParameterType-Arguments in SQLBindParameter auf. In der zweiten Spalte werden die Ergebnisse eines Tests aufgelistet, die der Treiber ausführt, um festzustellen, ob die Daten konvertiert werden können. In der dritten Spalte wird die SQLSTATE aufgelistet, die für jedes Ergebnis von SQLExecDirect, SQLExecute, SQLBulkOperations, SQLSetPos oder SQLPutData zurückgegeben wird. Daten werden nur dann an die Datenquelle gesendet, wenn SQL_SUCCESS zurückgegeben wird.

Wenn das ParameterType-Argument in SQLBindParameter den Bezeichner eines ODBC SQL-Datentyps enthält, der in der Tabelle für einen bestimmten C-Datentyp nicht angezeigt wird, gibt SQLBindParameter SQLSTATE 07006 (Verletzung des eingeschränkten Datentypattributs) zurück. Wenn das ParameterType-Argument einen treiberspezifischen Bezeichner enthält und der Treiber die Konvertierung vom spezifischen ODBC C-Datentyp in diesen treiberspezifischen SQL-Datentyp nicht unterstützt, gibt SQLBindParameter SQLSTATE HYC00 zurück (Optionales Feature nicht implementiert).

Wenn die in SQLBindParameter angegebenen Argumente ParameterValuePtr und StrLen_or_IndPtr Argumente beide Nullzeiger sind, gibt diese Funktion SQLSTATE HY009 zurück (Ungültige Verwendung des Nullzeigers). Obwohl sie nicht in den Tabellen angezeigt wird, legt eine Anwendung den Wert des Längen-/Indikatorpuffers fest, auf den das argument StrLen_or_IndPtr SQLBindParameteroder den Wert des StrLen_or_IndPtr Arguments von SQLPutData verweist SQL_NULL_DATA, um einen NULL-SQL-Datenwert anzugeben. (Die StrLen_or_IndPtr Argument entspricht dem SQL_DESC_OCTET_LENGTH_PTR Feld der APD.) Die Anwendung legt diese Werte auf SQL_NTS fest, um anzugeben, dass der Wert in *ParameterValuePtr in SQLBindParameter oder *DataPtr in SQLPutData (auf das SQL_DESC_DATA_PTR Feld der APD verweist) eine null-beendete Zeichenfolge ist.

Die folgenden Begriffe werden in den Tabellen verwendet:

  • Bytelänge der Daten – Anzahl der Bytes von SQL-Daten, die an die Datenquelle gesendet werden können, unabhängig davon, ob die Daten abgeschnitten werden, bevor sie an die Datenquelle gesendet werden. Bei Zeichenfolgendaten enthält dies kein Leerzeichen für das Nullendpunkt.

  • Spaltenbytelänge – Anzahl der Bytes, die zum Speichern der Daten in der Datenquelle erforderlich sind.

  • Zeichenbytelänge – Maximale Anzahl von Bytes, die zum Anzeigen von Daten im Zeichenformular erforderlich sind. Dies ist für jeden SQL-Datentyp in der Anzeigegröße definiert, mit Ausnahme der Zeichenbytelänge in Byte, während die Anzeigegröße in Zeichen liegt.

  • Anzahl der Ziffern – Anzahl der Zeichen, die verwendet werden, um eine Zahl darzustellen, einschließlich minuszeichen, Dezimalkomma und Exponent (falls erforderlich).

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

In diesem Abschnitt werden die folgenden Themen behandelt: