使用ole db模板,如何写blob大字段

ChinaThinker 2003-11-11 10:39:38
通过ado的实现我知道了.
但是olb db中通过ISequentialStream* m_FileBuffer指针实现读功能的比较多,实现写功能的例子没见到,希望高手指点,再就是有了blob大字段,记录用一般的方法怎么删不了(olb db+sql server)
下面是读的例子:(不用模板的写功能msdn上有方法,但是用了模板怎么完成呢?)
向导生成模板:
class CdboFANGANAPPAccessor
{
public:
SequentialStream* m_FileBuffer;
BEGIN_ACCESSOR_MAP(CdboFANGANAPPAccessor,2)
BEGIN_ACCESSOR(0, true)
COLUMN_ENTRY(1, m_guid)
END_ACCESSOR()
BEGIN_ACCESSOR(1, true)
BLOB_ENTRY(7, IID_ISequentialStream, STGM_READ, m_FileBuffer)
END_ACCESSOR()
END_ACCESSOR_MAP()

//将库中image字段内容读出写入一个文件中;
CdboFANGANAPP set;
if(FAILED(set.Open()))
return ;
ULONG cb;
char *m_pFileBuffer=NULL;
while (set.MoveNext()==S_OK)
{
CString docFilePath = toSaveDocDir;
CFile file;
if( !file.Open(docFilePath, CFile::modeCreate|CFile::modeWrite))
return ;
m_pFileBuffer = new char[m_nFileLen + 1];
if(!m_pFileBuffer)
return ;
do
{
set.m_FileBuffer->Read(m_pFileBuffer, m_nFileLen, &cb);
// Do something with the buffer
} while (cb > 0);

file.WriteHuge(m_pFileBuffer,m_nFileLen);
file.Close();

}
set.m_FileBuffer->Release();
set.Close();

//请问如何set.m_FileBuffer->Write(m_pFileBuffer, m_nFileLen, &cb)功能,
总是报错,因为set.m_FileBuffer总为NULL;
//set.Delete(),删不掉记录,为什么?

谢谢大虾们.


...全文
32 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ChinaThinker 2003-11-17
我要write的例子,thanks
  • 打赏
  • 举报
回复
stavck 2003-11-11
使用ISequentialStream试一试
  • 打赏
  • 举报
回复
AkiraChing 2003-11-11
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);
// 处理

...
}while(cb>0);
categories.pPicture->Release();
}

在打开表后首先反复调用read函数从ISequentialStream接口中以字节的形式读出BLOB数据。在调用MoveNext函数得到下一条记录之前调用Release函数释放接口指针
  • 打赏
  • 举报
回复
相关推荐
发帖
数据库
加入

3968

社区成员

VC/MFC 数据库
社区管理员
  • 数据库
申请成为版主
帖子事件
创建了帖子
2003-11-11 10:39
社区公告
暂无公告