Partilhar via


SQL: Tipos de dados SQL e C++ (ODBC)

Observação

Essas informações se aplicam às classes ODBC do MFC. Se você estiver trabalhando com as classes MFC DAO, consulte o tópico "Comparação do Microsoft Jet Database Engine SQL e ANSI SQL" na Ajuda do DAO.

A tabela a seguir mapeia tipos de dados ANSI SQL para tipos de dados C++. Isto aumenta as informações da linguagem C fornecidas no Apêndice D da documentação de Referência do Programador do ODBC. Os assistentes gerenciam a maioria dos mapeamentos de tipos de dados para você. Se você não usar um assistente, poderá usar as informações de mapeamento para ajudá-lo a escrever o código de troca de campo manualmente.

Tipos de dados ANSI SQL mapeados para tipos de dados C++

Tipo de dados ANSI SQL Tipo de dados C++
CHAR CString
Decimal CString 1
SMALLINT int
REAL float
INTEIRO long
FLUTUAR double
DUPLO double
NUMÉRICO CString 1
VARCHAR CString
LONGVARCHAR CLongBinary, CString 2
POUCO BOOL
TINYINT BYTE
BIGINT CString 1
BINÁRIO CByteArray
VARBINARY CByteArray
LONGVARBINARY CLongBinary, CByteArray 3
DATA CTime, CString
TEMPO CTime, CString
CARIMBO DE DATA/HORA CTime, CString
  1. ANSI DECIMAL e NUMERIC mapeiam para CString porque SQL_C_CHAR é o tipo de transferência ODBC padrão.

  2. Os dados de caracteres além de 255 caracteres são truncados por padrão quando mapeados para CString. Você pode estender o comprimento do truncamento definindo explicitamente o argumento nMaxLength de RFX_Text.

  3. Dados binários além de 255 caracteres são truncados por padrão quando mapeados para CByteArray. Você pode estender o comprimento do truncamento definindo explicitamente o argumento nMaxLength de RFX_Binary.

Se você não estiver usando a biblioteca de cursores ODBC, poderá encontrar um problema ao tentar atualizar dois ou mais campos longos de comprimento variável usando o driver ODBC do Microsoft SQL Server e as classes de banco de dados ODBC do MFC. Os tipos ODBC, SQL_LONGVARCHAR e SQL_LONGVARBINARY, são mapeados para tipos de texto e imagem do SQL Server. A CDBException é lançado se você atualizar dois ou mais campos longos de comprimento variável na mesma chamada para CRecordset::Update. Portanto, não atualize várias colunas longas simultaneamente com CRecordset::Update. Você pode atualizar várias colunas longas simultaneamente com a API SQLPutDataODBC. Você também pode usar a biblioteca de cursores ODBC, mas isso não é recomendado para drivers, como o driver do SQL Server, que suportam cursores e não precisam da biblioteca de cursores.

Se estiver a usar a biblioteca de cursores ODBC com as classes de base de dados ODBC MFC e o driver ODBC do Microsoft SQL Server, um ASSERT pode ocorrer juntamente com um CDBException se uma chamada para CRecordset::Update seguir uma chamada para CRecordset::Requery. Em vez disso, ligue CRecordset::Close e CRecordset::Open em vez de CRecordset::Requery. Outra solução é não usar a biblioteca de cursores ODBC, porque o SQL Server e o driver ODBC do SQL Server fornecem suporte nativo para cursores nativamente e a biblioteca de cursores ODBC não é necessária.

Ver também

SQL
SQL: Fazendo chamadas SQL diretas (ODBC)