Поделиться через


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.

См. также

Основные понятия

SQL

SQL. Выполнение прямых вызовов SQL (ODBC)