odbc/mfc 向mysql 写入二进制数据的问题

free_share 2008-10-21 06:01:33
问题描述:
向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
如有解答不胜感激。
...全文
144 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
free_share 2008-10-23
  • 打赏
  • 举报
回复
问题已经解决,感谢各位的回答,
下面是翻阅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。。。。。。
VsirSoft 2008-10-22
  • 打赏
  • 举报
回复
嗯 我也正想说用ADO
内存泄漏 2008-10-22
  • 打赏
  • 举报
回复
用ADO的方法试试..现在很少人用ODBC了...
dirdirdir3 2008-10-22
  • 打赏
  • 举报
回复
这种应该是兼容性问题吧,看看有没有新的补丁什么的出来.....

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧