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 |
Mapa DZIESIĘTna ANSI i NUMERYCZNA,
CString
ponieważ SQL_C_CHAR jest domyślnym typem transferu ODBC.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 elementuRFX_Text
.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 elementuRFX_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::Update
polecenia . Jednocześnie można zaktualizować wiele długich kolumn przy użyciu interfejsu API SQLPutData
ODBC. 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.