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 |
ANSI DECIMAL y NUMERIC se asignan a
CString
porque SQL_C_CHAR es el tipo de transferencia de ODBC predeterminado.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 deRFX_Text
.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 deRFX_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.