用ODBC
重载crecordset 
重写DoFieldExchange( CFieldExchange* pFX )
RFX_Binary( pFX, youfieldname, m_pbyte, 300000);//CByteArray *m_pbyte 长度你自己可以定长一些或短一些或动态。m_pbyte //为你的图片数据。
使用时:yourecordset.addnew();
yourecordset.m_pbyte = pbmp ; 
yourecordset.update();

解决方案 »

  1.   

    用ODBC
    重载crecordset 
    重写DoFieldExchange( CFieldExchange* pFX )
    RFX_Binary( pFX, youfieldname, m_pbyte, 300000);//CByteArray *m_pbyte 长度你自己可以定长一些或短一些或动态。m_pbyte //为你的图片数据。
    使用时:yourecordset.addnew();
    yourecordset.m_pbyte = pbmp ; 
    yourecordset.update();
      

  2.   

    有用ADO的么?
    在ADO中如何处理?
      

  3.   

    ADO处理.源码:只有存,取是一样的道理先图片文件读入pFileInfo[],
    try
    {
    char* pwritebase=pFileInfo;      
    VARIANT varBlob;
    SAFEARRAY* psa;
    SAFEARRAYBOUND safebound[1];    
    if(pwritebase)
    {
    safebound[0].lLbound =0;
    safebound[0].cElements =filesize;
    psa=SafeArrayCreate(VT_UI1,1,safebound);
    for (long i=0;i<(long)filesize;i++)
    SafeArrayPutElement(psa,&i,pwritebase++);
    varBlob.vt =VT_ARRAY | VT_UI1;
    varBlob.parray =psa;
    }
    _bstr_t sqltext="insert into ";
    sqltext+=(_bstr_t)tablename;
    sqltext+=" (id,parentid,bedelete,data) values (?,?,?,?)";
    m_commandptr.CreateInstance (__uuidof(Command));
    m_commandptr->ActiveConnection =papp->m_pConnection ;
    m_commandptr->CommandText =sqltext;
    m_commandptr->CommandType =adCmdText;
    m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("tableitemid",adInteger,adParamInput,4,COleVariant((short)id)));
    m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("parentid",adInteger,adParamInput,4,COleVariant((short)parentid)));
    m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("bedelete",adInteger,adParamInput,4,COleVariant((short)bedelete)));
    m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("data",/*adLongVarBinary*/adVarBinary,adParamInput,filesize+1,varBlob));
    m_commandptr->Execute (NULL,NULL,adCmdUnknown);
    }
    catch(...)
    {}
    读取的SOURCE
    try {
    _bstr_t sqltext="select * from ";
        sqltext+=(_bstr_t)tablename;
    sqltext+=" where id=? ";

    m_pUserSet.CreateInstance (__uuidof(Recordset));
    m_commandptr.CreateInstance (__uuidof(Command));
    m_commandptr->ActiveConnection =myapp->m_pConnection;
    m_commandptr->CommandText =sqltext;
    m_commandptr->CommandType =adCmdText;  
    m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("tableitemid",adInteger,adParamInput,4,COleVariant((short)tableitemid)));
    m_pUserSet=m_commandptr->Execute (NULL,NULL,adCmdUnknown);
    if (!m_pUserSet->adoEOF )
    {
    long filesize=m_pUserSet->GetFields()->GetItem("data")->ActualSize;
    if (filesize>0)
    {
    _variant_t varblob;
    varblob=m_pUserSet->GetFields ()->GetItem ("data")->GetChunk (filesize);
    if (varblob.vt == (VT_ARRAY | VT_UI1))
    {
    char* m_pBuffer=new char[filesize+1];
    char* pbuf;
    SafeArrayAccessData(varblob.parray ,(void**)&pbuf);
    memcpy(m_pBuffer,pbuf,filesize);
    SafeArrayUnaccessData(varblob.parray );
    //写到固定的子目录下:)
    CString temp=myapp->temppath;
    if (pItem->attribute ==21)
    {
    temp+="\\temp.xls";
    myapp->beExcelOrbeWord=true;
    }
    if (pItem->attribute ==22)
    {
    temp+="\\temp.doc";
    myapp->beExcelOrbeWord=false;
    }
    DeleteFile(temp );
    printfilename=temp;
    FILE* fp;   
    DWORD err=0;
    fp=fopen(temp,"wb+");
    if (fp)
    {
        fwrite(m_pBuffer,sizeof(char),filesize,fp);   
    fclose(fp);
    }
    else
    err=GetLastError();
    fp=NULL;
    tablename.ReleaseBuffer (-1);
    delete [] m_pBuffer;
    m_pBuffer=NULL;
    pbuf=NULL;
    if (err>0)
    return err;   
    }
    }
    }
    }