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

Altre risorse

Macros and Global Functions for OLE DB Consumer Templates