检索 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 使用者模板的宏和全局函数中的“列映射宏”。