SQL: SQL a datové typy C++ (ODBC)
Poznámka:
Tyto informace platí pro třídy MFC ODBC. Pokud pracujete s třídami MFC DAO, přečtěte si téma Porovnání sql databázového stroje Microsoft Jet a ANSI SQL v nápovědě k rozhraní DAO.
Následující tabulka mapuje datové typy ANSI SQL na datové typy C++. Tím se rozšíří informace jazyka C uvedené v dodatku D referenční dokumentace programátora ODBC. Průvodci spravují většinu mapování datových typů za vás. Pokud průvodce nepoužíváte, můžete pomocí informací o mapování ručně napsat kód výměny polí.
Datové typy ANSI SQL mapované na datové typy C++
Datový typ ANSI SQL | Datový typ C++ |
---|---|
UKLÍZEČKA | CString |
DESETINNÝ | CString 1 |
SMALLINT | int |
REÁLNÝ | float |
CELÉ ČÍSLO | long |
PLOUT | double |
DVOJITÝ | double |
ČÍSELNÝ | CString 1 |
VARCHAR | CString |
LONGVARCHAR | CLongBinary , CString 2 |
BIT | BOOL |
TINYINT | BAJT |
BIGINT | CString 1 |
BINÁRNÍ | CByteArray |
VARBINARY | CByteArray |
LONGVARBINARY | CLongBinary , CByteArray 3 |
DATE (Datum) | CTime , CString |
ČAS | CTime , CString |
ČASOVÉ RAZÍTKO | CTime , CString |
ANSI DECIMAL a NUMERIC mapovat,
CString
protože SQL_C_CHAR je výchozím typem přenosu ODBC.Data znaků nad rámec 255 znaků jsou ve výchozím nastavení zkrácena při mapování na
CString
. Délku zkrácení můžete rozšířit explicitním nastavením argumentu nMaxLength argumentuRFX_Text
.Binární data nad rámec 255 znaků jsou ve výchozím nastavení zkrácena při mapování na
CByteArray
. Délku zkrácení můžete rozšířit explicitním nastavením argumentu nMaxLength argumentuRFX_Binary
.
Pokud nepoužíváte knihovnu kurzorů ODBC, může dojít k potížím při pokusu o aktualizaci dvou nebo více dlouhých polí s proměnlivou délkou pomocí ovladače ODBC microsoft SQL Serveru a tříd databáze MFC ODBC. Typy ODBC, SQL_LONGVARCHAR a SQL_LONGVARBINARY, se mapuje na typy SQL Serveru s textem a obrázkem. Vyvolá CDBException
se, pokud aktualizujete dvě nebo více dlouhých polí s délkou proměnné při stejném volání CRecordset::Update
. Proto neaktualizovat více dlouhých sloupců současně s CRecordset::Update
. Pomocí rozhraní ODBC API SQLPutData
můžete aktualizovat více dlouhých sloupců současně . Můžete také použít knihovnu kurzorů ODBC, ale nedoporučuje se to pro ovladače, jako je ovladač SQL Serveru, který podporuje kurzory a nepotřebuje knihovnu kurzorů.
Pokud používáte knihovnu kurzorů ODBC s databázovými třídami MFC ODBC a ovladačem ODBC microsoft SQL Serveru, může dojít k ASSERT spolu s CDBException
voláním CRecordset::Update
volání CRecordset::Requery
. Místo toho volejte CRecordset::Close
a CRecordset::Open
ne CRecordset::Requery
. Dalším řešením není použít knihovnu kurzorů ODBC, protože SQL Server a ovladač ODBC sql serveru poskytují nativní podporu pro kurzory nativně a knihovna kurzorů ODBC není nutná.