设为首页 加入收藏

TOP

VisualC++ADO数据库编程入门(4)
2014-11-23 18:00:40 】 浏览:198
Tags:VisualC ADO 数据库 编程 入门

  1. 访问长数据


  在Microsoft SQL中的长数据包括text、image等这样长类型的数据,作为二进制字节来对待。


  可以用Field对象的GetChunk和AppendChunk方法来访问。每次可以读出或写入全部数据的一部分,它会记住上次访问的位置。但是如果中间访问了别的字段后,就又得从头来了。


  请看下面的例子:


  //写入一张照片到数据库:


  VARIANT varChunk;


  SAFEARRAY *psa;


  SAFEARRAYBOUND rgsabound[1];


  //VT_ARRAY│VT_UI1


  CFile f("h:\\aaa.jpg",Cfile::modeRead);


  BYTE bVal[ChunkSize+1];


  UINT uIsRead=0;


  //Create a safe array to store the array of BYTES


  while(1)


  {


  uIsRead=f.Read(bVal,ChunkSize);


  if(uIsRead==0)break;


  rgsabound[0].cElements =uIsRead; rgsabound[0].lLbound = 0; psa = SafeArrayCreate(VT_UI1,1,rgsabound);


  for(long index=0;index


  {


  if(FAILED(SafeArrayPutElement(psa,&index,&bVal[index]))) ::MessageBox(NULL,"啊,又出毛病了。","提示",MB_OK │ MB_ICONWARNING);


  }


  varChunk.vt = VT_ARRAY│VT_UI1; varChunk.parray = psa;


  try{


  m_pRecordset->Fields->GetItem("photo")->AppendChunk(varChunk);


  }


  catch (_com_error &e)


  {


  CString str=(char*)e.Description(); ::MessageBox(NULL,str+"\n又出毛病了。","提示",MB_OK │ MB_ICONWARNING);


  }


  ::VariantClear(&varChunk);


  ::SafeArrayDestroyData( psa);


  if(uIsRead


  }//while(1)


  f.Close();


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VisualC++ADO数据库编程入门(3) 下一篇VisualC++ADO数据库编程入门(5)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目