科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用VC实现对超长数据库字段的操作

用VC实现对超长数据库字段的操作

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

介绍了用VC实现对超长数据库字段操作方法的关键技术,并以Access2003环境下的数据库为例,在VC 6.0下进行了实现,给出了关键的程序代码。

作者:高云飞 孙斌 王宁 来源:计算机与信息技术 2007年10月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
2、将二进制文件写入到数据库:

  由于这个二进制文件可能很大,所以无法将所有内容一次性读入到内存。我们需要多次读入,每次可以使用函数CFile::Read()从文件中读出一个数据包,然后调用Field对象的AppandChrnk()函数将该包读入数据库。AppandChrnk()函数包含在Field对象中,原型如下:HRESULT AppendChunk (const _variant_t & Data );从函数原型中可以看到关键的问题是我们需把二进制数据赋值给VARIANT类型的变量。实现的关键代码如下:

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); ///创建SAFEARRAY对象
 for(long index=0;index<UISREAD;INDEX++)
  SafeArrayPutElement(psa,&index,&bVal[index]);
  varChunk.vt = VT_ARRAY|VT_UI1;
  varChunk.parray = psa;
  //加入BLOB类型的数据
  m_pRecordset->Fields->GetItem("data")->AppendChunk(varChunk);
  ::VariantClear(&varChunk);
  ::SafeArrayDestroyData( psa);
  if(uIsRead<<CHUNKSIZE) break;
}

  我们所有的读入数据工作都在一个while循环中实现,每次读入一个数据包,直到读完这个数据,即数据量为二进制数据的长度ChunkSize。其中*pBuf为指向缓冲区指针,即要读入的数据包。ChunkSize为VARIANT变量,用于保存二进制数据,psa是指向安全数组SAFEARRAY的指针。

  3、从数据库读出二进制对象到文件:

  同样,由于这个二进制对象可能很大,无法将所有内容一次性读入内存中对应于保存数据时我们所使用的AppendChunk函数,读取数据应该使用GetChunk函数,GetChunk的原型如下:

  _variant_t GetChunk (long Length );唯一的参数Length代表需要读取的字节数。

  实现的关键代码如下:

long lBlobSize = m_pRecordset->Fields-> Item["data"] ->ActualSize;
while(lBlobSize>0)
{
 lIsRead= lBlobSize >=ChunkSize? ChunkSize: lBlobSize;
 //从字段data中获取一个数据包
 varChunk = m_pRecordset->Fields->Item["data"]->GetChunk(lIsRead);
 for(index=0;index<LISREAD;INDEX++)
  ::SafeArrayGetElement(varChunk.parray,&index,buf+index);
  //将数据包写入文件
  f.Write(buf,lIsRead);
  lBlobSize -=lIsRead;
}

  其中f是一个CFile对象,代表了要存储的文件。Long型变量lBlobSize记录了二进制对象的大小。利用一个while循环,每次从数据库中读取lIsRead字节,直至将其全部读出。

  结束语

  由于信息技术的飞速发展,特别是多媒体技术的广泛运用,可以预见,以后数据库中大对象的应用将日益普遍,有关大对象的存取势必将是数据库技术的一个发展方向。本文讨论了二进制大对象BLOB在数据库中的存储与读取的VC实现,能够满足基本的系统要求,具备了一定的可移植性,为今后更广泛的应用和更深入的研究提供的借鉴基础。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章