1. VC把一个文件存入数据库  CFile imagefile;
  if(0 == imagefile.Open("d:\\user\\bmp.bmp",CFile::modeRead))
     return;
  _RecordsetPtr pRs = NULL;             
  _ConnectionPtr pConnection = NULL;
  _variant_t varChunk;
  HRESULT hr;
  BYTE* pbuf;
  long nLength = imagefile.GetLength();
  pbuf = new BYTE[nLength+2];
  if(pbuf == NULL)
     return;                             //allocate memory error;
  imagefile.Read(pbuf,nLength);          //read the file into memory  BYTE *pBufEx;
  pBufEx = pbuf;
  //build a SAFFERRAY
  SAFEARRAY* psa;
  SAFEARRAYBOUND rgsabound[1];
  rgsabound[0].lLbound = 0;
  rgsabound[0].cElements = nLength;
  psa = SafeArrayCreate(VT_UI1, 1, rgsabound);  for (long i = 0; i < nLength; i++)
       SafeArrayPutElement (psa, &i, pBufEx++);
  VARIANT varBLOB;
  varBLOB.vt = VT_ARRAY | VT_UI1;
  varBLOB.parray = psa;  _bstr_t strCnn("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CUSTOM;Data Source=SERVER");    
    try
    {
        //Open a connection
        pConnection.CreateInstance(__uuidof(Connection));
        hr = pConnection->Open(strCnn,"","",NULL);   //Connect a DataBase
        pRs.CreateInstance(__uuidof(Recordset));
        pRs->Open("CustomInfo",_variant_t((IDispatch *) pConnection,true),adOpenKeyset,adLockOptimistic,adCmdTable);  //Open a Table
 
//      pRs->AddNew();        
        pRs->Fields->GetItem("Image")->AppendChunk(varBLOB);        
        pRs->Update();
        pRs->Close();
        pConnection->Close();
 }
    catch(_com_error &e)
    {
        // Notify the user of errors if any.
        _bstr_t bstrSource(e.Source());
        _bstr_t bstrDescription(e.Description());
        CString sError;
        sError.Format("Source : %s \n Description : %s\n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
        AfxMessageBox(sError);     
 }2. VC把数据库中IMAGE字段取出存为文件    _RecordsetPtr pRs = NULL;
    _ConnectionPtr pConnection = NULL;
    _variant_t varChunk;
    HRESULT hr;
    VARIANT varBLOB;
    _bstr_t strCnn("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CUSTOM;Data Source=SERVER");    
    try
    {
        //Open a connection
        pConnection.CreateInstance(__uuidof(Connection));
        hr = pConnection->Open(strCnn,"","",NULL);        
        pRs.CreateInstance(__uuidof(Recordset));
        pRs->Open("CustomInfo",_variant_t((IDispatch *) pConnection,true),adOpenKeyset,adLockOptimistic,adCmdTable);
       //read  data  
       long lDataLength = pRs->Fields->GetItem("Image")->ActualSize;
       varBLOB = pRs->GetFields()->GetItem("Image")->GetChunk(lDataLength);
      if(varBLOB.vt == (VT_ARRAY | VT_UI1))        
     {
            BYTE *pBuf = NULL;   
            pBuf = (BYTE*)GlobalAlloc(GMEM_FIXED,lDataLength);
            SafeArrayAccessData(varBLOB.parray,(void **)pBuf); 
            //Build a File in Windows Temp Directory
            char tmpPath[_MAX_PATH+1];
            GetTempPath(_MAX_PATH,tmpPath);
            CString strFileName = "temp.bmp";
            strFileName = tmpPath+strFileName;
                                      
            CFile outFile(strFileName,CFile::modeCreate|CFile::modeWrite);
            LPSTR buffer = (LPSTR)GlobalLock((HGLOBAL)pBuf);
            outFile.WriteHuge(buffer,lDataLength);
            GlobalUnlock((HGLOBAL)pBuf);
            outFile.Close();           
            SafeArrayUnaccessData (varBLOB.parray);
       }        pRs->Close();
        pConnection->Close();
     }
    catch(_com_error &e)
    {
        // Notify the user of errors if any.
        _bstr_t bstrSource(e.Source());
        _bstr_t bstrDescription(e.Description());
        CString sError;
        sError.Format("Source : %s \n Description : %s\n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
        AfxMessageBox(sError);     
 }