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_hDataper 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)