今天写通过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浪费了我好多时间……
CRecordset::GetFieldValue取得CString的Bug
最新推荐文章于 2018-01-19 14:39:03 发布