我在VC6使用ADO连接SQL SERVER数据库,
我要在这个数据库的一个表上建立一个字段来存储一幅图片(暂时为BMP图片).
我现在有一个BMP文件,
我应该怎么做,
才可以将BMP文件的内容写入这个字段,
并且可以从这个字段读出BMP文件的内容并且显示出该图片?
在VC上实现.........

解决方案 »

  1.   

    以前写过向Oracle中保存文件,然后可以读出。给你参考一下吧。
    写入:
    if( !file.Open( sGFile, CFile::modeRead) )
        return "文件操作失败!";
    m_nFileLen = file.GetLength();
    m_pBMPBuffer = new char[m_nFileLen + 1];
    if(!m_pBMPBuffer)
    return "文件操作失败!";
    if(file.ReadHuge(m_pBMPBuffer,m_nFileLen) != m_nFileLen)
    {
    delete[] m_pBMPBuffer;
    return "文件操作失败!";
    } file.Close(); 
        pBuf = m_pBMPBuffer;
        if(pBuf)
     {    
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = m_nFileLen;
    psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
    for (long i = 0; i < (long)m_nFileLen; i++)
    SafeArrayPutElement (psa, &i, pBuf++);
    varBLOB.vt = VT_ARRAY | VT_UI1;
    varBLOB.parray = psa;
    m_pRecordset->GetFields()->GetItem("PM_DIREC")->AppendChunk(varBLOB);
     }
      else
      {  
        delete[] m_pBMPBuffer;
        return "文件操作失败!";
      } 
     delete[] m_pBMPBuffer;
    }====================
    读取:
    long lDataSize = m_pRecordset->GetFields()->GetItem("PM_FLOW")->ActualSize;
    if(lDataSize > 0)
    {
    _variant_t varBLOB;
    varBLOB = m_pRecordset->GetFields()->GetItem("PM_FLOW")->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);
    m_nFileLen = lDataSize;
    CFile file;
    TCHAR lpszFileName[MAX_PATH+1];
    ::GetModuleFileName(NULL,lpszFileName,MAX_PATH+1);
    CString module = lpszFileName;
    int index = module.ReverseFind('\\');
    module = module.Left(index+1);

    if(!file.Open(module+"\\temp.file", CFile::modeWrite|CFile::modeCreate))
    {
       sItem.nItemID=0;
       delete[] m_pBMPBuffer;
       return sItem;
    }
                    sItem.sSaveFile=module+"\\temp.file" ;
    file.WriteHuge(m_pBMPBuffer,m_nFileLen);
    file.Close();
    delete[] m_pBMPBuffer;
            


    }
      

  2.   

    http://www.vckbase.com/document/viewdoc/?id=252
      

  3.   

    http://www.microsoft.com/technet/prodtechnol/sql/2000/reskit/part3/c1161.mspx
    Using BLOBs
      

  4.   

    http://www.vckbase.com/document/viewdoc/?id=252