SQL: tipi di dati SQL e C++ (ODBC)
Nota
Queste informazioni sono valide per le classi ODBC MFC. Se si lavora con le classi DAO MFC, vedere l'argomento "Confronto tra Microsoft Jet motore di database SQL e SQL ANSI" nella Guida di DAO.
La tabella seguente esegue il mapping dei tipi di dati SQL ANSI ai tipi di dati C++. In questo modo vengono aumentate le informazioni sul linguaggio C fornite nell'Appendice D della documentazione di riferimento del programmatore ODBC. Le procedure guidate gestiscono la maggior parte del mapping dei tipi di dati. Se non si utilizza una procedura guidata, è possibile utilizzare le informazioni di mapping per scrivere manualmente il codice di scambio dei campi.
Tipi di dati SQL ANSI mappati ai tipi di dati C++
Tipo di dati SQL ANSI | Tipo di dati C++ |
---|---|
CHAR | CString |
DECIMAL | CString 1 |
SMALLINT | int |
REAL | float |
INTEGER | long |
FLOAT | double |
DOUBLE | double |
NUMERIC | CString 1 |
VARCHAR | CString |
LONGVARCHAR | CLongBinary , CString 2 |
BIT | BOOL |
TINYINT | BYTE |
BIGINT | CString 1 |
BINARIO | CByteArray |
VARBINARY | CByteArray |
LONGVARBINARY | CLongBinary , CByteArray 3 |
DATE | CTime , CString |
ORA | CTime , CString |
TIMESTAMP | CTime , CString |
ANSI DECIMAL e NUMERIC vengono mappati a
CString
perché SQL_C_CHAR è il tipo di trasferimento ODBC predefinito.I dati di tipo carattere superiori a 255 caratteri vengono troncati per impostazione predefinita quando viene eseguito il mapping a
CString
. È possibile estendere la lunghezza del troncamento impostando in modo esplicito l'argomento nMaxLength diRFX_Text
.I dati binari superiori a 255 caratteri vengono troncati per impostazione predefinita quando viene eseguito il mapping a
CByteArray
. È possibile estendere la lunghezza del troncamento impostando in modo esplicito l'argomento nMaxLength diRFX_Binary
.
Se non si usa la libreria di cursori ODBC, è possibile che si verifichi un problema durante il tentativo di aggiornare due o più campi a lunghezza variabile lunghi utilizzando il driver ODBC di Microsoft SQL Server e le classi di database ODBC MFC. I tipi ODBC, SQL_LONGVARCHAR e SQL_LONGVARBINARY, eseguono il mapping ai tipi di testo e immagine di SQL Server. Viene CDBException
generata un'eccezione se si aggiornano due o più campi a lunghezza variabile lunga nella stessa chiamata a CRecordset::Update
. Pertanto, non aggiornare più colonne lunghe contemporaneamente con CRecordset::Update
. È possibile aggiornare più colonne lunghe contemporaneamente con l'API SQLPutData
ODBC . È anche possibile usare la libreria di cursori ODBC, ma questa opzione non è consigliata per i driver, ad esempio il driver di SQL Server, che supportano i cursori e non richiedono la libreria di cursori.
Se si usa la libreria di cursori ODBC con le classi di database ODBC MFC e il driver ODBC di Microsoft SQL Server, un'istruzione ASSERT può verificarsi insieme a un CDBException
se una chiamata a CRecordset::Update
segue una chiamata a CRecordset::Requery
. Chiamare CRecordset::Close
invece e CRecordset::Open
anziché CRecordset::Requery
. Un'altra soluzione non consiste nell'usare la libreria di cursori ODBC, perché SQL Server e il driver ODBC di SQL Server forniscono il supporto nativo per i cursori in modo nativo e la libreria di cursori ODBC non è necessaria.