问题描述:
向mysql添加其它类型的数据都没问题,当添加二进制数据,例如一个图片,程序执行正常但实际上并没有添加进去。
奇怪的是:我用mysql 的C API 向数据库中添加该图片后,使用 odbc/mfc 却可以很好的把它读出来。添加二进制文件的示例代码如下:
其中rs 为结果集;m_data 的类型为CLongBinary
CFileStatus fileStatus;
CFile fp("viewpp.jpg",CFile::modeRead);
fp.GetStatus(fileStatus); Cnctable *rs=new Cnctable(mbase);
rs->Open(CRecordset::snapshot); rs->AddNew();         
 rs->m_data.m_hData = ::GlobalAlloc(GPTR ,(size_t)fileStatus.m_size);  
size_t temps= fp.Read(rs->m_data.m_hData,fileStatus.m_size); 
 rs->m_data.m_dwDataLength = fileStatus.m_size;
 rs->SetFieldNull(&rs->m_data,FALSE);
 rs->Update();
注:使用的odbc驱动为3.51
如有解答不胜感激。

解决方案 »

  1.   

    用ADO的方法试试..现在很少人用ODBC了... 
      

  2.   

    问题已经解决,感谢各位的回答,
    下面是翻阅MSDN 使用CByteArray解决上述问题,
    具体原因不明,可能是兼容性问题。
    代码如下:
    m_data 的类型由CLongBinary 改为CByteArray;同时修改DoFieldExchange中对应的内容
    CFileStatus fileStatus; 
    CFile fp("viewpp.jpg",CFile::modeRead); 
    fp.GetStatus(fileStatus); Cnctable *rs=new Cnctable(mbase); 
    rs->Open(CRecordset::snapshot); rs->AddNew();      
    rs->m_data.m_hData = ::GlobalAlloc(GPTR ,(size_t)fileStatus.m_size); 
    rs->m_data.m_dwDataLength = fileStatus.m_size;
    ------------------------------下面是改动的地方----------
    nct->m_data.SetSize(fileStatus.m_size);
    fp.Read(nct->m_data.GetData(),fileStatus.m_size);
    nct->Update();本来用C 已经完成了,可领导说要用ODBC