Freigeben über


SQL: SQL- und C++-Datentypen (ODBC)

Hinweis

Diese Informationen gelten für die MFC-ODBC-Klassen. Wenn Sie mit den MFC-DAO-Klassen arbeiten, lesen Sie das Thema „Comparison of Microsoft Jet Database Engine SQL and ANSI SQL“ in der DAO-Hilfe.

Die folgende Tabelle ordnet ANSI SQL-Datentypen C++-Datentypen zu. Dadurch werden die Informationen zur C-Programmiersprache in Anhang D des ODBC-Programmiererhandbuchs erweitert. Die Assistenten verwalten die meisten Datentypzuordnungen für Sie. Wenn Sie keinen Assistenten verwenden, können Sie mithilfe der Zuordnungsinformationen den Feldaustauschcode manuell schreiben.

ANSI SQL-Datentypen, die C++-Datentypen zugeordnet sind

ANSI SQL-Datentyp C++-Datentyp
CHAR CString
DEZIMAL CString 1
SMALLINT int
WIRKLICH float
INTEGER long
FLOAT double
DOUBLE double
NUMERISCH CString 1
VARCHAR CString
LONGVARCHAR CLongBinary, CString 2
BIT BOOL
TINYINT BYTE
BIGINT CString 1
BINÄR CByteArray
VARBINARY CByteArray
LONGVARBINARY CLongBinary, CByteArray 3
DATUM CTime, CString
ZEIT CTime, CString
ZEITSTEMPEL CTime, CString
  1. ANSI DECIMAL und NUMERIC werden auf CString abgebildet, da SQL_C_CHAR der standardmäßige ODBC-Übertragungstyp ist.

  2. Zeichendaten, die über 255 Zeichen hinausgehen, werden standardmäßig abgeschnitten, wenn sie zugeordnet sind CString. Sie können die Abkürzungslänge erweitern, indem Sie das Argument "nMaxLengthRFX_Text" explizit festlegen.

  3. Binäre Daten, die über 255 Zeichen hinausgehen, werden standardmäßig abgeschnitten, wenn sie zugeordnet sind CByteArray. Sie können die Abkürzungslänge erweitern, indem Sie das Argument "nMaxLengthRFX_Binary" explizit festlegen.

Wenn Sie die ODBC-Cursorbibliothek nicht verwenden, tritt möglicherweise ein Problem auf, wenn Sie versuchen, zwei oder mehr lange Felder mit variabler Länge mithilfe des Microsoft SQL Server ODBC-Treibers und der MFC ODBC-Datenbankklassen zu aktualisieren. Die ODBC-Typen, SQL_LONGVARCHAR und SQL_LONGVARBINARY, werden text- und image-SQL Server-Typen zugeordnet. Ein CDBException wird ausgelöst, wenn Sie zwei oder mehr lange Felder variabler Länge bei demselben Aufruf aktualisieren.CRecordset::Update Aktualisieren Sie daher nicht mehrere lange Spalten gleichzeitig mit CRecordset::Update. Sie können mehrere lange Spalten gleichzeitig mit der ODBC-API SQLPutDataaktualisieren. Sie können auch die ODBC-Cursorbibliothek verwenden, dies wird jedoch nicht für Treiber wie den SQL Server-Treiber empfohlen, die Cursor unterstützen und die Cursorbibliothek nicht benötigen.

Wenn Sie die ODBC-Cursorbibliothek mit den MFC ODBC-Datenbankklassen und dem Microsoft SQL Server ODBC-Treiber verwenden, kann ein ASSERT zusammen mit einem CDBException auftreten, wenn ein Aufruf von CRecordset::Update einem Aufruf von CRecordset::Requery folgt. Anstatt CRecordset::Requery zu rufen, rufen Sie CRecordset::Close und CRecordset::Open. Eine andere Lösung besteht nicht darin, die ODBC-Cursorbibliothek zu verwenden, da der SQL Server- und der SQL Server-ODBC-Treiber systemeigene Unterstützung für Cursor bereitstellen und die ODBC-Cursorbibliothek nicht benötigt wird.

Siehe auch

SQL
SQL: Durchführen direkter SQL-Aufrufe (ODBC)