Recordset: gestione di dati di grandi dimensioni (ODBC)
Questo argomento si applica sia alle classi ODBC MFC che alle classi DAO MFC.
Nota
Se si usano le classi DAO MFC, gestire gli elementi di dati di grandi dimensioni con la classe CByteArray anziché la classe CLongBinary. Se si usano le classi ODBC MFC con recupero di righe bulk, utilizzare CLongBinary
anziché CByteArray
. Per altre informazioni sul recupero delle righe bulk, vedere Recordset: recupero di record in blocco (ODBC).
Si supponga che il database possa archiviare grandi parti di dati, ad esempio bitmap (fotografie dei dipendenti, mappe, immagini di prodotti, oggetti OLE e così via). Questo tipo di dati viene spesso definito oggetto binario di grandi dimensioni (o BLOB) perché:
Ogni valore di campo è grande.
A differenza dei numeri e di altri tipi di dati semplici, non ha dimensioni prevedibili.
I dati sono senza forma dal punto di vista del programma.
In questo argomento viene illustrato il supporto delle classi di database per l'uso di tali oggetti.
Gestione di oggetti di grandi dimensioni
I recordset hanno due modi per risolvere la difficoltà speciale di gestire oggetti binari di grandi dimensioni. È possibile usare la classe CByteArray oppure la classe CLongBinary. In generale, CByteArray
è il modo migliore per gestire dati binari di grandi dimensioni.
CByteArray
richiede un sovraccarico maggiore rispetto CLongBinary
a ma è più idoneo, come descritto in Classe CByteArray. CLongBinary
viene descritto brevemente nella classe CLongBinary.
Per informazioni dettagliate sull'uso CByteArray
di per lavorare con elementi di dati di grandi dimensioni, vedere La nota tecnica 45.
Classe CByteArray
CByteArray
è una delle classi di raccolta MFC. Un CByteArray
oggetto archivia una matrice dinamica di byte, ovvero la matrice può aumentare, se necessario. La classe fornisce accesso rapido in base all'indice, come per le matrici C++ predefinite. CByteArray
gli oggetti possono essere serializzati e scaricati a scopo diagnostico. La classe fornisce funzioni membro per ottenere e impostare byte specificati, inserimento e aggiunta di byte e rimozione di un byte o di tutti i byte. Queste funzionalità semplificano l'analisi dei dati binari. Ad esempio, se l'oggetto binario è un oggetto OLE, potrebbe essere necessario utilizzare alcuni byte di intestazione per raggiungere l'oggetto effettivo.
Uso di CByteArray nei recordset
Assegnando a un membro dati di campo del recordset il tipo CByteArray
, si fornisce una base fissa da cui RFX può gestire il trasferimento di tale oggetto tra il recordset e l'origine dati e tramite il quale è possibile modificare i dati all'interno dell'oggetto . RFX richiede un sito specifico per i dati recuperati ed è necessario un modo per accedere ai dati sottostanti.
Per informazioni dettagliate sull'uso CByteArray
di per lavorare con elementi di dati di grandi dimensioni, vedere La nota tecnica 45.
Classe CLongBinary
Un oggetto CLongBinary è una shell semplice intorno a un HGLOBAL
handle per un blocco di spazio di archiviazione allocato nell'heap. Quando associa una colonna di tabella contenente un oggetto binario di grandi dimensioni, RFX alloca l'handle HGLOBAL
quando deve trasferire i dati al recordset e archivia l'handle nel CLongBinary
campo del recordset.
A sua volta, si usa l'handle HGLOBAL
, m_hData
per lavorare con i dati stessi, operando su di esso come si farebbe su qualsiasi handle di dati. In questo caso CByteArray aggiunge funzionalità.
Attenzione
Gli oggetti CLongBinary non possono essere usati come parametri nelle chiamate di funzione. Inoltre, l'implementazione, che chiama ::SQLGetData
, rallenta necessariamente le prestazioni di scorrimento per uno snapshot scorrevole. Ciò può essere vero anche quando si usa una ::SQLGetData
chiamata per recuperare colonne dello schema dinamiche.
Vedi anche
Recordset (ODBC)
Recordset: recupero di somme e altri risultati aggregati (ODBC)
Trasferimento di campi di record (RFX)