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 "Vergleich von Microsoft Jet Datenbank-Engine SQL und ANSI SQL" in der DAO-Hilfe.
Die folgende Tabelle ordnet ANSI SQL-Datentypen C++-Datentypen zu. Dadurch werden die C-Sprachinformationen in Anhang D der Referenzdokumentation des ODBC-Programmierers 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 |
DECIMAL | CString 1 |
SMALLINT | int |
REAL | float |
INTEGER | long |
FLOAT | double |
DOUBLE | double |
NUMERIC | CString 1 |
VARCHAR | CString |
LONGVARCHAR | CLongBinary , CString 2 |
BIT | BOOL |
TINYINT | BYTE |
BIGINT | CString 1 |
BINARY | CByteArray |
VARBINARY | CByteArray |
LONGVARBINARY | CLongBinary , CByteArray 3 |
DATE | CTime , CString |
TIME | CTime , CString |
TIMESTAMP | CTime , CString |
ANSI DECIMAL und NUMERIC map to
CString
because SQL_C_CHAR is the default ODBC transfer type.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.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
Fehler wird ausgelöst, wenn Sie zwei oder mehr lange Felder mit variabler Länge für denselben 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 SQLPutData
aktualisieren. 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-Objekt zusammen mit einem CDBException
Aufruf nach einem Aufruf auftreten.CRecordset::Requery
CRecordset::Update
Rufen Sie CRecordset::Close
stattdessen und CRecordset::Open
nicht .CRecordset::Requery
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.