Udostępnij za pośrednictwem


SQL: typy danych SQL i C++ (ODBC)

Uwaga

Te informacje dotyczą klas MFC ODBC. Jeśli pracujesz z klasami MFC DAO, zobacz temat "Porównanie bazy danych Microsoft Jet Database Engine SQL i ANSI SQL" w pomocy dao.

Poniższa tabela mapuje typy danych ANSI SQL na typy danych C++. Rozszerza to informacje o języku C podane w dodatku D dokumentacji referencyjnej programisty ODBC. Kreatory zarządzają większością mapowań typów danych. Jeśli nie używasz kreatora, możesz użyć informacji o mapowaniu, aby ułatwić ręczne pisanie kodu wymiany pól.

Typy danych SQL ANSI mapowane na typy danych C++

Typ danych SQL ANSI Typ danych C++
CHAR CString
DZIESIĘTNY CString 1
SMALLINT int
PRAWDZIWY float
LICZBA CAŁKOWITA long
SPŁAWIK double
PODWÓJNY double
NUMERYCZNY CString 1
VARCHAR CString
LONGVARCHAR CLongBinary, CString 2
BIT BOOL
TINYINT BAJT
BIGINT CString 1
DWÓJKOWY CByteArray
VARBINARY CByteArray
LONGVARBINARY CLongBinary, CByteArray 3
DATA CTime, CString
CZAS CTime, CString
TIMESTAMP CTime, CString
  1. Mapa DZIESIĘTna ANSI i NUMERYCZNA, CString ponieważ SQL_C_CHAR jest domyślnym typem transferu ODBC.

  2. Dane znaków przekraczające 255 znaków są domyślnie obcinane, gdy jest mapowane na CString. Długość obcinania można rozszerzyć, ustawiając jawnie argument nMaxLength elementu RFX_Text.

  3. Dane binarne przekraczające 255 znaków są domyślnie obcięte, gdy są mapowane na CByteArray. Długość obcinania można rozszerzyć, ustawiając jawnie argument nMaxLength elementu RFX_Binary.

Jeśli nie używasz biblioteki kursorów ODBC, może wystąpić problem podczas próby zaktualizowania co najmniej dwóch długich pól o zmiennej długości przy użyciu sterownika ODBC programu Microsoft SQL Server i klas baz danych MFC ODBC. Typy ODBC, SQL_LONGVARCHAR i SQL_LONGVARBINARY, mapuj na typy tekstu i obrazu programu SQL Server. Wartość A CDBException jest zgłaszana w przypadku zaktualizowania co najmniej dwóch długich pól o zmiennej długości w tym samym wywołaniu metody CRecordset::Update. W związku z tym nie aktualizuj jednocześnie wielu długich kolumn za pomocą CRecordset::Updatepolecenia . Jednocześnie można zaktualizować wiele długich kolumn przy użyciu interfejsu API SQLPutDataODBC. Możesz również użyć biblioteki kursorów ODBC, ale nie jest to zalecane dla sterowników, takich jak sterownik programu SQL Server, który obsługuje kursory i nie potrzebuje biblioteki kursorów.

Jeśli używasz biblioteki kursorów ODBC z klasami baz danych MFC ODBC i sterownikiem ODBC programu Microsoft SQL Server, asertywne może wystąpić wraz z CDBException wywołaniem metody CRecordset::Update CRecordset::Requery. Zamiast tego wywołaj metodę CRecordset::Close , a CRecordset::Open nie CRecordset::Requery. Innym rozwiązaniem nie jest użycie biblioteki kursorów ODBC, ponieważ program SQL Server i sterownik ODBC programu SQL Server zapewniają natywną obsługę kursorów natywnie, a biblioteka kursorów ODBC nie jest potrzebna.

Zobacz też

SQL
SQL: wykonywanie bezpośrednich wywołań SQL (ODBC)