Compartilhar via


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

Observação

Essas informações aplicam-se às classes ODBC do MFC. Se estiver trabalhando com as classes DAO do MFC, confira o tópico "Comparação do SQL e SQL ANSI do Mecanismo de Banco de Dados Jet da Microsoft" na Ajuda do DAO.

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

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

Tipo de dados SQL ANSI Tipo de dados em 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. Os valores DECIMAL e NUMERIC ANSI são mapeados para CString porque SQL_C_CHAR é o tipo de transferência ODBC padrão.

  2. Dados de caractere 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. Um CDBException será gerado 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 ODBC SQLPutData. Você também pode usar a biblioteca de cursores ODBC, mas isso não é recomendado para drivers, como o driver SQL Server, que dão suporte a cursores e não precisam da biblioteca de cursores.

Se você estiver usando a biblioteca de cursores ODBC com as classes de banco de dados ODBC do MFC e o driver ODBC do Microsoft SQL Server, um ASSERT poderá ocorrer junto com um CDBException se uma chamada a CRecordset::Update for realizada após uma chamada para CRecordset::Requery. Em vez disso, faça uma chamada para CRecordset::Close e CRecordset::Open em vez de CRecordset::Requery. Outra solução é não usar a biblioteca de cursores ODBC, pois o SQL Server e o driver ODBC do SQL Server dão suporte nativo para cursores e a biblioteca de cursores ODBC não é necessária.

Confira também

SQL
SQL: fazendo chamadas SQL diretas (ODBC)