CAdoRecordSet  adoRecordSet;  
//把图片存入数据库 。 Photo 是数据库的列名 m_ImagePath 是图片路径
adoRecordSet.AppendChunk("Photo",LPCTSTR(m_ImagePath));这样为什么存不进去?
//从数据库中读出图片 
adoRecordSet.GetChunk("Photo",m_EmployeeBmp);
 
每次读的时候,m_EmployeeBmp 总是一个空值。

解决方案 »

  1.   

    希望这个能给你帮助,我也做这方面的,这部分已经解决了
           
           CFile file;
            ...........
           fileLen = file.GetLength();
           char * m_pBMPBuffer =new char[fileLen + 1];
       if(!m_pBMPBuffer){
       MessageBox("申请堆内存失败","error",MB_OK);
       return;
       }
      
       file.ReadHuge(m_pBMPBuffer,fileLen);            VARIANT varBLOB;
       SAFEARRAY *psa;
                SAFEARRAYBOUND rgsabound[1];   
         if(m_pBMPBuffer)
       {    
          rgsabound[0].lLbound = 0;
          rgsabound[0].cElements = fileLen;
          psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
          for (long i = 0; i < (long)fileLen; i++)
         SafeArrayPutElement (psa, &i, m_pBMPBuffer++);
          varBLOB.vt = VT_ARRAY | VT_UI1;
          varBLOB.parray = psa;
                   Recordset->GetFields()->GetItem("photo")->AppendChunk(varBLOB);
          Recordset->Update();
       } 上面是存,取的时候
               long lDataSize = m_pRecordset->GetFields()->GetItem("photo")->ActualSize;
      if(lDataSize > 0)
      {
          _variant_t varBLOB;
          varBLOB = m_pRecordset->GetFields()->GetItem("photo")->
                                                                    GetChunk(lDataSize);
    if(varBLOB.vt == (VT_ARRAY | VT_UI1))
    {
       if(m_pBMPBuffer = new char[lDataSize+1])         ///重新分配必要的存储空间
      {
    char *pBuf = NULL;
    SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
    memcpy(m_pBMPBuffer,pBuf,lDataSize);
                                           ///复制数据到缓冲区m_pBMPBuffer
    SafeArrayUnaccessData (varBLOB.parray);
      }
    }
      }
    你可以取出来还原成bmp文件看看效果
             CFile TempFile;
    TempFile.Open("G:\\Test.bmp",CFile::modeWrite|CFile::modeCreate);
    TempFile.WriteHuge(m_pBMPBuffer,lDataSize);
    TempFile.Close();