检索 BLOB

可以通过各种方式检索二进制大型对象 (BLOB)。 可以使用 DBTYPE_BYTES 将 BLOB 作为字节序列检索或使用 ISequentialStream 之类的接口。 有关详细信息,请参阅 OLE DB 程序员参考中的 BLOB 和 OLE 对象

以下代码演示如何使用 ISequentialStream 检索 BLOB。 通过宏 BLOB_ENTRY,可以指定接口和用于接口的标志。 打开表后,代码会在 ISequentialStream 上重复调用 Read,以从 BLOB 读取字节。 在调用 MoveNext 以获取下一条记录之前,代码会先调用 Release 以释放接口指针。

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

有关处理 BLOB 数据的宏的详细信息,请参阅 OLE DB 使用者模板的宏和全局函数中的“列映射宏”

另请参阅

使用访问器
OLE DB 使用者模板的宏和全局函数