Sdílet prostřednictvím


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 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 za vás spravují většinu mapování datových typů. 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++
ZNAK CString
DESETINNÉ ČÍSLO CString 1
SMALLINT int
REAL float
CELÉ ČÍSLO long
FLOAT 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
  1. ANSI DECIMAL a NUMERIC jsou mapovány na CString protože SQL_C_CHAR je výchozím typem přenosu ODBC.

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

  3. 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 argumentu RFX_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. CDBException je vyvolán, pokud aktualizujete dvě nebo více dlouhých polí s proměnnou délkou při stejném volání CRecordset::Update. Neaktualizujte více dlouhých sloupců současně s CRecordset::Update. Pomocí rozhraní ODBC API SQLPutDatamůž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, pokud volání CRecordset::Requery následuje za voláním CRecordset::Update. 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á.

Viz také

SQL
SQL: Přímá volání SQL (ODBC)