CRecordset::GetFieldValue取得CString的Bug

本文记录了在使用MFC的CRecordset::GetFieldValue从ODBC读取数据库时遇到的问题,即获取的CString对象长度错误且合并字符串时只保留了第一个字符。该问题被确认为微软VS2005(MFC7.1)的一个已知Bug,并已通过补丁解决。作者提醒开发者注意此问题以避免不必要的困扰。
摘要由CSDN通过智能技术生成

今天写通过ODBC读取数据库的代码时发现
CRecordset::GetFieldValue取得的CString有问题

---------------------------- 代码分割线 ----------------------------

CDatabase db;
db.Open(NULL,FALSE,FALSE,_T("ODBC;DSN=MySQL;UID=root;PWD=root"));
CRecordset rs( &db );
rs.Open( CRecordset::forwardOnly, _T("SELECT * FROM tb_test order by id Asc"));

CString varID;
rs.GetFieldValue(_T("id"), varID);

CString varName;
rs.GetFieldValue(_T("name"), varName);

int nLength = varID.GetLength(); // nLength会大于varID的正确长度
CString str = varID + varName; // str中会只有varID的第一个字符

---------------------------- 代码分割线 ----------------------------

查了好久没发现问题
最后搜索英文网页才发现这是微软VS2005(MFC7.1)的一个Bug
应该已经出补丁解决了

Damaged CString when reading it using CRecordset::GetFieldValue from UNICODE MFC version.

记载一下备忘
这个Bug浪费了我好多时间……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值