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