Abrufen eines BLOBs

Sie können ein binäres großes Objekt (BLOB) auf verschiedene Arten abrufen. Sie können DBTYPE_BYTES das BLOB als Bytesequenz abrufen oder eine Schnittstelle wie ISequentialStream. Weitere Informationen finden Sie unter BLOBS und OLE-Objekte in der OLE DB-Programmierreferenz.

Der folgende Code zeigt, wie Sie ein BLOB mithilfe ISequentialStreamvon . Mit dem Makro BLOB_ENTRY können Sie die Schnittstelle und die für die Schnittstelle verwendeten Flags angeben. Nach dem Öffnen der Tabelle ruft Read der Code wiederholt an ISequentialStream , um Bytes aus dem BLOB zu lesen. Der Code ruft Release zum Löschen des Schnittstellenzeigers auf, bevor der aufruft MoveNext , um den nächsten Datensatz abzurufen.

class CCategories
{
public:
   ISequentialStream* pPicture;

BEGIN_COLUMN_MAP(CCategories)
   BLOB_ENTRY(4, IID_ISequentialStream, STGM_READ, pPicture)
END_COLUMN_MAP()
};

Anschließend wird der folgende Code verwendet:

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();
}

Weitere Informationen zu Makros, die BLOB-Daten verarbeiten, finden Sie unter Spaltenzuordnungsmakros in Makros und globalen Funktionen für OLE DB Consumer Templates.

Siehe auch

Verwenden von Zugriffsmethoden
Makros und globale Funktionen für OLE-Consumervorlagen