当前位置:首页>>开发编程>>综合开发>>新闻内容
用VC实现对超长数据库字段的操作
作者: 发布时间:2006-9-24 10:53:28 文章来源:

    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实现,能够满足基本的系统要求,具备了一定的可移植性,为今后更广泛的应用和更深入的研究提供的借鉴基础。


[首页]    [上一页]    [下一页]    [末页]    
最新更新
·wml中页面自动跳转的实现方法
·Alexa排名数据接口的简要介绍
·利用U盘进行软件加密的方法(VB)
·优秀程序员的十个习惯
·项目管理:如何逃离垃圾客户
·QQ2009去广告部分核心源代码
·让程序更容易理解:13个代码注释的小技
·nx1和nx2后缀名是什么数据库文件?
·正则表达式符号解释大全
·什么是RIA?介绍几种RIA客户端开发技术
相关信息
· VC编程技巧及方法20种
·在VC中为应用程序添加图形超链接功能
·利用VC打造自己的资源浏览器
·使用VC对Office文档进行操作
·如何用VC在win2003中得到登陆用户密码
·VC实现PC并行端口数字信息输入/输出
·VC小技巧:窗体中显示bmp图象
·用VC编写基于Windows的精确定时程序
·用VC编写C/S消息传送程序
画心
愚爱
偏爱
火苗
白狐
画沙
犯错
歌曲
传奇
稻香
小酒窝
狮子座
小情歌
全是爱
棉花糖
海豚音
我相信
甩葱歌
这叫爱
shero
走天涯
琉璃月
Nobody
我爱他
套马杆
爱是你我
最后一次
少女时代
灰色头像
断桥残雪
美了美了
狼的诱惑
我很快乐
星月神话
心痛2009
爱丫爱丫
半城烟沙
旗开得胜
郎的诱惑
爱情买卖
2010等你来
我叫小沈阳
i miss you
姑娘我爱你
我们都一样
其实很寂寞
我爱雨夜花
变心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK绷
贝多芬的悲伤
哥只是个传说
丢了幸福的猪
找个人来爱我
要嫁就嫁灰太狼
如果这就是爱情
我们没有在一起
寂寞在唱什么歌
斯琴高丽的伤心
别在我离开之前离开
不是因为寂寞才想你
爱上你等于爱上了错
在心里从此永远有个你
一个人的寂寞两个人的错