Partager via


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
  1. Carte ANSI DECIMAL et NUMERIC vers CString laquelle SQL_C_CHAR est le type de transfert ODBC par défaut.

  2. 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 de RFX_Text.

  3. 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 de RFX_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 SQLPutDataODBC. 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.

Voir aussi

SQL
SQL : appels SQL directs (ODBC)