Search code examples
c++file-iomfcbinaryfilescfile

How can I read a CLongBinary field from my database and write it into a CFile object?


im using a CRecordset to get data from my SQL Server. One table stores a binary file (pdf, odt, ...). My VisualStudio maps the columns to a CLongBinary field.

How can I read and open the file from the CLongBinary field?

im using some ancient version 4.2 of MFC, VisualStudio 6.0


Solution

  • Do something like this. This will just give you an idea. I haven't tested the code.

    CLongBinary myfield ;
    
    ... retrive myfield from database here
    
    
    BYTE *dataptr = (BYTE*)GlobalLock(myfield.m_hData) ;
    
    // now dataptr points to your raw data, and myfield.m_dwDataLength is the length of that data
    
    CString tempname = ... create temporary filename somewhere
    CFile myfile ;
    myfile.Open(tempfilename, CFile::modeCreate|CFile::modeWrite);
    myfile.Write(dataptr, myfield.m_dwDataLength) ,
    myfile.Close() ;
    GlobalUnlock(myfield.m_hData) ;
    
    ShellExecute(NULL, _T("open"), tempfilename, NULL, NULL, SW_SHOW) ;