SQL: SQL- und C++-Datentypen (ODBC)
Tipp
Diese Informationen beziehen sich auf die MFC-ODBC-Klassen. Wenn Sie mit den MFC-DAO-Klassen arbeiten, lesen Sie in der DAO-Hilfe das Thema "Vergleich von Microsoft Jet Database Engine-SQL und ANSI-SQL".
Die folgende Tabelle listet ANSI SQL-Datentypen und die zugehörigen C++-Datentypen auf. Diese Tabelle ergänzt die C-bezogenen Informationen im Anhang D von ODBC SDK Programmer's Reference auf der MSDN Library-CD. Die Assistenten verwalten die meisten Datentypzuordnungen. Falls Sie keinen Assistenten verwenden, können Sie mithilfe dieser Zuordnungsinformationen den Code für den Feldaustausch von Hand erstellen.
C++-Datentypen zugeordnete ANSI SQL-Datentypen
ANSI SQL-Datentyp |
C++-Datentyp |
---|---|
CHAR |
CString |
DEZIMAL |
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 |
1. Die ANSI-Typen DECIMAL und NUMERIC werden CString zugeordnet, da SQL_C_CHAR der ODBC-Standardübertragungstyp ist.
2. Zeichendaten, die länger als 255 Zeichen sind, werden bei der CString-Zuordnung standardmäßig abgeschnitten. Sie können diese Länge erhöhen, indem Sie das Argument nMaxLength von RFX_Text explizit einstellen.
3. Binäre Daten, die länger als 255 Zeichen sind, werden bei der CByteArray-Zuordnung standardmäßig abgeschnitten. Sie können diese Länge erhöhen, indem Sie das Argument nMaxLength von RFX_Binary explizit festlegen.
Falls Sie die ODBC-Cursorbibliothek nicht verwenden, ergeben sich möglicherweise Probleme bei dem Versuch, zwei oder mehr lange Felder variabler Länge zu aktualisieren, wenn Sie hierzu den Microsoft SQL Server-ODBC-Treiber und die MFC-ODBC-Datenbankklassen verwenden. Die ODBC-Typen SQL_LONGVARCHAR und SQL_LONGVARBINARY werden den SQL Server-Typen "text" und "image" zugeordnet. Wenn Sie zwei oder mehr lange Felder variabler Länge bei demselben Aufruf von CRecordset::Update aktualisieren, wird eine CDBException ausgelöst. Daher dürfen mehrere lange Spalten nicht gleichzeitig mit CRecordset::Update aktualisiert werden. Sie können mehrere lange Spalten gleichzeitig mit der ODBC-API-Funktion SQLPutData aktualisieren. Sie können auch die ODBC-Cursorbibliothek verwenden, deren Verwendung für Treiber wie dem SQL Server-Treiber jedoch nicht empfehlenswert ist, da solche Treiber 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 ASSERT zusammen mit CDBException ausgelöst werden, falls ein Aufruf für CRecordset::Update einem Aufruf für CRecordset::Requery folgt. Rufen Sie daher an Stelle von CRecordset::Requery erst CRecordset::Close und dann CRecordset::Open auf. Eine weitere Lösungsmöglichkeit besteht darin, die ODBC-Cursorbibliothek nicht zu verwenden, da SQL Server und der SQL Server-ODBC-Treiber Cursor standardmäßig unterstützen und die ODBC-Cursorbibliothek daher nicht benötigt wird.