CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

sos紧急求救,各位大哥请帮忙

楼主a123456z(小熊)2004-05-02 10:34:42 在 VC/MFC / 基础类 提问

我的数据库表里有一个image字段,我想在程序的运行界面上加入一张图片,输入图片的路径后,将这张图片存入数据库,这该怎么做呀,请各位大哥指点 问题点数:60、回复次数:3Top

1 楼Mackz(在相互)回复于 2004-05-02 14:53:43 得分 0

到“文档中心”找找看,网上也有很多这样的文章了。Top

2 楼swbreath(雪白呼嘘())回复于 2004-05-02 19:36:05 得分 60

11.   访问长数据  
  在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();  
   
  //从数据库读一张照片:  
  CFile   f;  
  f.Open("h:\\bbb.jpg",CFile::modeWrite|CFile::modeCreate);  
  long   lPhotoSize   =   m_pRecordset->Fields->Item["photo"]->ActualSize;      
  long   lIsRead=0;  
   
  _variant_t   varChunk;  
  BYTE   buf[ChunkSize];  
  while(lPhotoSize>0)  
  {  
    lIsRead=lPhotoSize>=ChunkSize?   ChunkSize:lPhotoSize;  
    varChunk   =   m_pRecordset->Fields->  
                                      Item["photo"]->GetChunk(lIsRead);  
    for(long   index=0;index<lIsRead;index++)                    
    {                        
      ::SafeArrayGetElement(varChunk.parray,&index,buf+index);        
    }  
    f.Write(buf,lIsRead);  
    lPhotoSize-=lIsRead;  
  }//while()  
  f.Close();  
  Top

3 楼swbreath(雪白呼嘘())回复于 2004-05-02 19:36:23 得分 0

学一学ADO的用法吧:)这篇文章非常详细!http://www.csdn.net/Develop/Read_Article.asp?Id=14153  
  Top

相关问题

  • 各位大哥请帮忙!!!
  • 请教各位大哥!
  • 请各位大哥帮忙!
  • 请教各位大哥
  • 请各位大哥帮忙
  • 请教各位大哥!!!
  • 各位大哥请帮忙!!
  • 请各位大哥帮忙!
  • 请各位大哥帮忙!!
  • 请问各位大哥??

关键词

  • 数据库
  • 数据
  • uisread
  • chunksize
  • varchunk
  • lphotosize
  • rgsabound
  • lisread
  • psa
  • 访问

得分解答快速导航

  • 帖主:a123456z
  • swbreath

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo