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
  1. ANSI DECIMAL e NUMERIC vengono mappati a CString perché SQL_C_CHAR è il tipo di trasferimento ODBC predefinito.

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

  3. 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 di RFX_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 SQLPutDataODBC . È 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.

Vedi anche

SQL
SQL: esecuzione di chiamate SQL dirette (ODBC)