Hi
When using GetFieldValue to get a CString value in UNICODE the CString size is twice the length of the string because the CRecordset uses SqlGetData odbc api that returns the number of bytes copied to buffer and not the number of WCHARs. So when CRecordset issue a CString::ReleaseBuffer(SqlGetDataLen); the CString becomes with twice the size of the real data. Making use of CString += results in bad strings ...
PS.: This problem exists in MFC 7.1 and 8.0
My way to resolve this is calling CString::ReleaseBuffer(-1); again after call GetFieldValue to force CString recalculate its size.
There is a Microsoft fix for that

BUG MFC 8.0 (same in 7.1 and 7.0) CRecordset::GetFieldValue using UNICODE
SQLIsFun
Please log the issue at http://lab.msdn.microsoft.com/productfeedback/default.aspx so that the owners can take a look. Also, please reply back with the bug link so that others can follow up on the status.
Thanks in advance for taking the time to report the problem.
Thanks, Ayman Shoukry VC++ Team