VisualC++ADO数据库编程入门(4)
来源:优易学  2010-1-14 18:51:23   【优易学:中国教育考试门户网】   资料下载   IT书店

  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<uIsRead;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<ChunkSize)break;

  }//while(1)

  f.Close();

[1] [2] [3] 下一页

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训