Recupero di un BLOB
Esistono diversi modi per recuperare un BLOB (Binary Large Object).È possibile utilizzare DBTYPE_BYTES per recuperare il BLOB come sequenza di byte oppure un'interfaccia quale ISequentialStream.Per ulteriori informazioni, vedere BLOBS and OLE Objects in OLE DB Programmer's Reference (Platform SDK) (informazioni in lingua inglese).
Nel codice riportato di seguito viene descritto il recupero di un BLOB tramite ISequentialStream.La macro BLOB_ENTRY consente di specificare l'interfaccia e i flag utilizzati per l'interfaccia.Una volta aperta la tabella, viene chiamato Read ripetutamente su ISequentialStream per leggere i byte del BLOB.Viene inoltre chiamato Release per gestire il puntatore di interfaccia prima di chiamare MoveNext per recuperare il record successivo.
class CCategories
{
public:
ISequentialStream* pPicture;
BEGIN_COLUMN_MAP(CCategories)
BLOB_ENTRY(4, IID_ISequentialStream, STGM_READ, pPicture)
END_COLUMN_MAP()
};
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 ulteriori informazioni sulle macro che gestiscono i dati BLOB, vedere la sezione relativa alle macro della mappa delle colonne in Macro e funzioni globali per i modelli consumer OLE DB.
Vedere anche
Concetti
Utilizzo delle funzioni di accesso