SQL. Типы данных SQL и C++ (ODBC)
![]() |
---|
В этом разделе приведены сведения, относящиеся к классам ODBC библиотеки MFC.Сведения, относящиеся к классам DAO библиотеки MFC, см. в разделе "Сравнение ядра СУБД Microsoft Jet SQL и ANSI SQL" в справке DAO. |
В следующей таблице приведено сопоставление типов данных ANSI SQL и C++.Эти сведения дополняют описание языка C, приведенное в приложении D справочника программиста ODBC SDK на компакт-диске библиотеки MSDN.Сопоставление большинства типов данных осуществляется автоматически с помощью мастеров.Если мастер не используется, можно написать код сопоставления полей вручную на основе приведенных сведений о сопоставлении.
Сопоставление типов данных ANSI SQL и C++
Тип данных ANSI SQL |
Тип данных в C++ |
---|---|
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 |
1.Типы ANSI DECIMAL и NUMERIC сопоставляются типу CString, поскольку в ODBC тип SQL_C_CHAR является используемым по умолчанию типом преобразования.
2.Символьные типы данных длиной более 255 знаков по умолчанию усекаются при сопоставлении типу CString.Чтобы увеличить длину усечения, явно установите аргумент nMaxLength метода RFX_Text.
3.Двоичные типы данных длиной более 255 знаков по умолчанию усекаются при сопоставлении типу CByteArray.Чтобы увеличить длину усечения, явно установите аргумент nMaxLength метода RFX_Binary.
Если не используется библиотека курсоров ODBC, может возникнуть ошибка при попытке обновления нескольких полей переменной длины типа Long с помощью драйвера Microsoft SQL Server ODBC и классов баз данных ODBC в библиотеке MFC.Типы ODBC SQL_LONGVARCHAR и SQL_LONGVARBINARY сопоставляются типам текста и изображений SQL Server.При попытке обновления нескольких полей переменной длины типа Long посредством одного вызова метода CRecordset::Update вызывается исключение CDBException.В связи с этим не следует одновременно выполнять обновление нескольких столбцов типа Long посредством одного вызова метода CRecordset::Update.Чтобы одновременно обновить несколько столбцов типа Long, используйте функцию SQLPutData интерфейса API ODBC.Также можно использовать библиотеку курсоров ODBC (не рекомендуется для таких драйверов, как драйвер SQL Server, которые поддерживают курсоры и не используют библиотеки курсоров).
Если используется библиотека курсоров ODBC с классами баз данных ODBC библиотеки MFC и драйвером Microsoft SQL Server ODBC, при вызове метода CRecordset::Update после метода CRecordset::Requery могут одновременно возникнуть исключения ASSERT и CDBException.В связи с этим следует вызывать методы CRecordset::Close и CRecordset::Open вместо метода CRecordset::Requery.Также можно не использовать библиотеку курсоров ODBC, поскольку в драйвере SQL Server и SQL Server ODBC реализована собственная поддержка курсоров и не используется библиотека курсоров ODBC.