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


SQL. Типы данных SQL и C++ (ODBC)

Примечание.

Эта информация относится к классам ODBC библиотеки MFC. Если вы работаете с классами DAO MFC, см. раздел "Сравнение Microsoft Jet ядро СУБД SQL и ANSI SQL" в справке DAO.

В следующей таблице сопоставляется типы данных ANSI SQL с типами данных C++ . Это расширяет сведения о языке C, приведенные в приложении D справочной документации программиста ODBC. Мастера управляют сопоставлением большинства типов данных. Если вы не используете мастер, вы можете использовать сведения о сопоставлении, чтобы создать код обмена полями вручную.

Типы данных SQL ANSI, сопоставленные с типами данных C++

Тип данных ANSI SQL Тип данных в C++
ОБУГЛИТЬ CString
ДЕСЯТИЧНАЯ СИСТЕМА CString 1
SMALLINT int
РЕАЛЬНЫЙ float
ЦЕЛОЕ ЧИСЛО long
Флоат double
двойной double
ЧИСЛОВОЙ CString 1
VARCHAR CString
LONGVARCHAR CLongBinary, CString 2
БИТ BOOL
ТИНИНТ БАЙТ
BIGINT CString 1
ДВОИЧНЫЙ CByteArray
VARBINARY CByteArray
LONGVARBINARY CLongBinary, CByteArray 3
ДАТА CTime, CString
ВРЕМЯ CTime, CString
TIMESTAMP CTime, CString
  1. СОПОСТАВЛЕНИЕ ANSI DECIMAL и NUMERIC с тем CString , что SQL_C_CHAR является типом передачи ODBC по умолчанию.

  2. Символьные данные, превышающие 255 символов, усечены по умолчанию при сопоставлении с CString. Вы можете расширить длину усечения, явно задав .

  3. Двоичные данные, превышающие 255 символов, усечены по умолчанию при сопоставлении с CByteArray. Вы можете расширить длину усечения, явно задав .

Если вы не используете библиотеку курсоров ODBC, при попытке обновить два или более длинных поля переменной длины с помощью драйвера ODBC Microsoft SQL Server и классов базы данных ODBC MFC может возникнуть проблема. Типы ODBC, SQL_LONGVARCHAR и SQL_LONGVARBINARY, сопоставляют с типами SQL Server и текстом. При CDBException обновлении двух или более длинных полей переменной длины при одном вызове CRecordset::Updateсоздается исключение. Поэтому не обновляйте несколько длинных столбцов одновременно с CRecordset::Update. Можно обновить несколько длинных столбцов одновременно с API SQLPutDataODBC. Вы также можете использовать библиотеку курсоров ODBC, но это не рекомендуется для драйверов, таких как драйвер SQL Server, который поддерживает курсоры и не нуждается в библиотеке курсоров.

Если вы используете библиотеку курсоров ODBC с классами баз данных ODBC MFC и драйвером ODBC Microsoft SQL Server,то при вызове CDBExceptionCRecordset::Updateвызова может возникнуть CRecordset::Requery утверждение. Вместо этого вызов и CRecordset::CloseCRecordset::Open вместо CRecordset::Requeryнего. Другим решением является не использование библиотеки курсоров ODBC, так как SQL Server и драйвер ODBC SQL Server обеспечивают встроенную поддержку курсоров в собственном коде, а библиотека курсоров ODBC не требуется.

См. также

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