Megosztás:


SQL: SQL és C++ adattípusok (ODBC)

Megjegyzés:

Ezek az információk az MFC ODBC-osztályokra vonatkoznak. Ha az MFC DAO-osztályokkal dolgozik, tekintse meg a DAO súgójának "A Microsoft Jet Adatbázismotor SQL és ANSI SQL összehasonlítása" című témakörét.

Az alábbi táblázat az ANSI SQL-adattípusokat C++ adattípusokra képezi le. Ez kibővíti az ODBC Programozó referenciadokumentációjának D függelékében megadott C nyelvi információkat. A varázslók a legtöbb adattípus-leképezést kezelik. Ha nem használ varázslót, a leképezési adatok segítségével manuálisan is megírhatja a mezőcsere-kódot.

A C++ adattípusokra leképezett ANSI SQL-adattípusok

ANSI SQL-adattípus C++ adattípus
BEJÁRÓNŐ CString
Decimális CString 1
SMALLINT int
VALÓS float
EGÉSZ SZÁM long
LEBEG double
DUAL double
NUMERIKUS CString 1
VARCHAR CString
LONGVARCHAR CLongBinary, CString 2
BIT BOOL
TINYINT BYTE-
BIGINT CString 1
BINÁRIS CByteArray
VARBINARY CByteArray
LONGVARBINARY CLongBinary, CByteArray 3
DÁTUM CTime, CString
IDŐ CTime, CString
IDŐBÉLYEG CTime, CString
  1. ANSI DECIMÁLIS és NUMERIKUS leképezése CString-ra történik, mert az SQL_C_CHAR az alapértelmezett ODBC-átviteli típus.

  2. 255 karakternél hosszabb karakteradat alapértelmezés szerint csonkul, amikor a következőre van térképezve: CString. A csonkolás hosszát az nMaxLength argumentum RFX_Textexplicit megadásával hosszabbíthatja meg.

  3. A 255 karakternél hosszabb bináris adatok alapértelmezés szerint csonkolva lesznek a megfeleltetéskor CByteArray. A csonkolás hosszát az nMaxLength argumentum RFX_Binaryexplicit megadásával hosszabbíthatja meg.

Ha nem az ODBC-kurzortárat használja, problémát tapasztalhat, amikor két vagy több hosszú változó hosszúságú mezőt próbál frissíteni a Microsoft SQL Server ODBC-illesztőprogram és az MFC ODBC-adatbázisosztályok használatával. Az ODBC-típusok, SQL_LONGVARCHAR és SQL_LONGVARBINARY, a SQL Server szöveg és kép típusaira vannak leképezve. A CDBException akkor kerül a programba, ha két vagy több hosszú változó hosszúságú mezőt frissít ugyanazon a híváson CRecordset::Update. Ezért ne frissítsen egyszerre több hosszú oszlopot.CRecordset::Update Az ODBC API-val SQLPutDataegyszerre több hosszú oszlopot is frissíthet. Használhatja az ODBC-kurzortárat is, de ez nem ajánlott olyan illesztőprogramok esetében, mint például az SQL Server-illesztőprogram, amelyek támogatják a kurzorokat, és nincs szükségük a kurzortárra.

Ha az ODBC kurzorkódtárat az MFC ODBC adatbázisosztályokkal és a Microsoft SQL Server ODBC-illesztővel használja, akkor előfordulhat, hogy egy ASSERT hiba történik, és a CDBException ha egy CRecordset::Update hívás követi a CRecordset::Requery hívást. Ehelyett hívja meg CRecordset::Close és CRecordset::Open ne CRecordset::Requery. Egy másik megoldás, hogy ne használjuk az ODBC kurzortárat, mert az SQL Server és az SQL Server ODBC-illesztő natív módon támogatja a kurzorokat, így nincs szükség az ODBC kurzortárra.

Lásd még

SQL
SQL: Közvetlen SQL-hívások indítása (ODBC)