我有一个较大的sql查询的一部分存储为LPCTSTR
LPCTSTR var = _T(" SELECT ...");
它工作正常。我需要用变量修改查询,所以我正在尝试
CString sqlQuerry = _T(" SELECT ... %s");
CString sqlString, stringVar = _T("variable");
sqlString.Format(sqlQuerry, stringVar);
var = (LPCTSTR)sqlString; // var is LPCTSTR type
当我在调试器中观察时,var看起来很好,但是当我运行应用程序时,输出窗口会显示奇怪的字符而不是我的查询(°YQ)。
我删除了修改部分,所以现在它只是
CString sqlQuerry = _T(" SELECT ...");
var = (LPCTSTR)sqlQuerry;
但仍然是调试输出中的奇怪字符。看起来编码问题对我来说,我做错了什么?
答案 0 :(得分:2)
var = (LPCTSTR)sqlString; // var is LPCTSTR type
您以后对var
做了什么?当sqlString
失去范围时,var
指向垃圾。这不是复制,var
只是指向sqlString
内部缓冲区的指针。
即说,使用绑定参数。不要在SQL字符串上使用任何类型的字符串格式。真。使用绑定参数。谷歌or use wikipedia。让little Bobby Tables感到自豪。