SQL : types de données SQL et C++ (ODBC)
Remarque
Ces informations s’appliquent aux classes ODBC MFC. Si vous utilisez les classes DAO MFC, consultez la rubrique « Comparaison SQL entre le moteur de base de données Microsoft Jet et ANSI » dans l’aide de DAO.
Le tableau suivant mappe les types de données ANSI SQL aux types de données C++. Cela augmente les informations de langage C fournies dans l’annexe D de la documentation de référence du programmeur ODBC. Les Assistants gèrent la plupart des mappages de types de données pour vous. Si vous n’utilisez pas d’Assistant, vous pouvez utiliser les informations de mappage pour vous aider à écrire manuellement le code d’échange de champ.
Types de données ANSI SQL mappés aux types de données C++
Type de données ANSI SQL | Type de données 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 |
Carte ANSI DECIMAL et NUMERIC vers
CString
laquelle SQL_C_CHAR est le type de transfert ODBC par défaut.Les données de caractères au-delà de 255 caractères sont tronquées par défaut lorsqu’elles sont mappées à
CString
. Vous pouvez étendre la longueur de troncation en définissant explicitement l’argument nMaxLength deRFX_Text
.Les données binaires au-delà de 255 caractères sont tronquées par défaut lorsqu’elles sont mappées à
CByteArray
. Vous pouvez étendre la longueur de troncation en définissant explicitement l’argument nMaxLength deRFX_Binary
.
Si vous n’utilisez pas la bibliothèque de curseurs ODBC, vous pouvez rencontrer un problème lors de la tentative de mise à jour de deux champs de longueur variable ou plus longs à l’aide du pilote ODBC Microsoft SQL Server et des classes de base de données ODBC MFC. Les types ODBC, SQL_LONGVARCHAR et SQL_LONGVARBINARY, mappent aux types SQL Server texte et image. A CDBException
est levée si vous mettez à jour deux champs de longueur variable ou plus longs sur le même appel à CRecordset::Update
. Par conséquent, ne mettez pas à jour plusieurs colonnes longues simultanément avec CRecordset::Update
. Vous pouvez mettre à jour plusieurs colonnes longues simultanément avec l’API SQLPutData
ODBC. Vous pouvez également utiliser la bibliothèque de curseurs ODBC, mais cela n’est pas recommandé pour les pilotes, comme le pilote SQL Server, qui prennent en charge les curseurs et n’ont pas besoin de la bibliothèque de curseurs.
Si vous utilisez la bibliothèque de curseurs ODBC avec les classes de base de données ODBC MFC et le pilote ODBC Microsoft SQL Server, une assertion peut se produire avec un CDBException
appel si un appel suit CRecordset::Update
un appel à CRecordset::Requery
. Au lieu de cela, appelez CRecordset::Close
et CRecordset::Open
plutôt que CRecordset::Requery
. Une autre solution n’est pas d’utiliser la bibliothèque de curseurs ODBC, car SQL Server et le pilote ODBC SQL Server fournissent une prise en charge native des curseurs en mode natif et la bibliothèque de curseurs ODBC n’est pas nécessaire.