Compartir vía


SQL: Tipos de datos de SQL y C++ (ODBC)

Nota:

Esta información es aplicable a las clases ODBC de MFC. Si trabaja con las clases DAO de MFC, consulte el tema "Comparación del código SQL del motor de base de datos Microsoft Jet y el código SQL ANSI" en la ayuda de DAO.

En la tabla siguiente se asignan tipos de datos de ANSI SQL a tipos de datos de C++. Esto aumenta la información del lenguaje C que se proporciona en el Anexo D de la documentación de Referencia del programador de ODBC. Los asistentes administran la mayoría de la asignación de tipos de datos automáticamente. Si no usa un asistente, puede usar la información de asignación para ayudarle a escribir manualmente el código de intercambio de campos.

Tipos de datos de ANSI SQL asignados a tipos de datos de C++

Tipo de datos de ANSI SQL Tipo de datos de 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
FECHA CTime, CString
TIME CTime, CString
TIMESTAMP CTime, CString
  1. ANSI DECIMAL y NUMERIC se asignan a CString porque SQL_C_CHAR es el tipo de transferencia de ODBC predeterminado.

  2. Los datos de caracteres superiores a 255 caracteres se truncan de manera predeterminada cuando se asignan a CString. Puede ampliar la longitud del truncamiento estableciendo explícitamente el argumento nMaxLength de RFX_Text.

  3. Los datos binarios superiores a 255 caracteres se truncan de manera predeterminada cuando se asignan a CByteArray. Puede ampliar la longitud del truncamiento estableciendo explícitamente el argumento nMaxLength de RFX_Binary.

Si no usa la biblioteca de cursores ODBC, es posible que encuentre un problema al intentar actualizar dos o más campos de longitud variable largos mediante el controlador ODBC de Microsoft SQL Server y las clases de base de datos ODBC de MFC. Los tipos de ODBC, SQL_LONGVARCHAR y SQL_LONGVARBINARY, se asignan a los tipos de texto e imagen de SQL Server. Si actualiza dos o más campos de longitud variable largos en la misma llamada a CRecordset::Update, se generará una excepción CDBException. Por lo tanto, no actualice varias columnas largas simultáneamente con CRecordset::Update. Puede actualizar varias columnas largas simultáneamente con la API SQLPutData de ODBC. También puede usar la biblioteca de cursores de ODBC, pero esto no se recomienda para controladores, como el controlador de SQL Server, que admite cursores y no necesita la biblioteca de cursores.

Si usa la biblioteca de cursores de ODBC con las clases de base de datos ODBC de MFC y el controlador ODBC de Microsoft SQL Server, puede producirse una ASSERT junto con una excepción CDBException si una llamada a CRecordset::Update sigue a una llamada a CRecordset::Requery. En su lugar, llame a CRecordset::Close y CRecordset::Open más que a CRecordset::Requery. Otra solución consiste en no usar la biblioteca de cursores de ODBC, ya que SQL Server y el controlador ODBC de SQL Server proporcionan compatibilidad nativa con cursores de forma nativa y no se necesita la biblioteca de cursores de ODBC.

Consulte también

SQL
SQL: Realizar llamadas directas a SQL (ODBC)