Recupero di un BLOB
È possibile recuperare un oggetto binario di grandi dimensioni (BLOB) in vari modi. È possibile usare DBTYPE_BYTES
per recuperare il BLOB come sequenza di byte o usare un'interfaccia come ISequentialStream
. Per altre informazioni, vedere BLOB e oggetti OLE nella guida di riferimento per programmatori OLE DB.
Il codice seguente illustra come recuperare un BLOB usando ISequentialStream
. La macro BLOB_ENTRY consente di specificare l'interfaccia e i flag utilizzati per l'interfaccia. Dopo aver aperto la tabella, il codice chiama Read
ripetutamente su ISequentialStream
per leggere i byte dal BLOB. Il codice chiama Release
per eliminare il puntatore dell'interfaccia prima di chiamare MoveNext
per ottenere il record successivo.
class CCategories
{
public:
ISequentialStream* pPicture;
BEGIN_COLUMN_MAP(CCategories)
BLOB_ENTRY(4, IID_ISequentialStream, STGM_READ, pPicture)
END_COLUMN_MAP()
};
Quindi, usato dal codice seguente:
CTable<CAccessor<CCategories>> categories;
ULONG cb;
BYTE myBuffer[65536];
categories.Open(session, "Categories");
while (categories.MoveNext() == S_OK)
{
do
{
categories.pPicture->Read(myBuffer, 65536, &cb);
// Do something with the buffer
} while (cb > 0);
categories.pPicture->Release();
}
Per altre informazioni sulle macro che gestiscono i dati BLOB, vedere Macro mappa colonne in Macro e Funzioni globali per i modelli di consumer OLE DB.
Vedi anche
Uso delle funzioni di accesso
Macro e funzioni globali per modelli consumer OLE DB