CString到LPCTSTR转换会破坏sql查询

时间:2015-04-30 05:50:47

标签: c++ atl c-strings

我有一个较大的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;

但仍然是调试输出中的奇怪字符。看起来编码问题对我来说,我做错了什么?

1 个答案:

答案 0 :(得分:2)

var = (LPCTSTR)sqlString; // var is LPCTSTR type

您以后对var做了什么?当sqlString失去范围时,var指向垃圾。这不是复制,var只是指向sqlString内部缓冲区的指针。

即说,使用绑定参数。不要在SQL字符串上使用任何类型的字符串格式。真。使用绑定参数。谷歌or use wikipedia。让little Bobby Tables感到自豪。