CString 到 LPCTSTR 的转换中断 sql 查询

CString to LPCTSTR conversion breaks sql query

我将较大的 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 在调试器中观察时看起来不错,但是当我在 运行 应用程序中时,输出 window 显示奇怪的字符而不是我的查询 (°YQ)。

我删除了修改部分,所以现在只是

CString sqlQuerry = _T(" SELECT ...");
var = (LPCTSTR)sqlQuerry;

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

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

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

就是说,使用绑定参数。不要在 SQL 字符串上使用任何类型的字符串格式。真的。使用绑定参数。 Google它or use wikipedia. Make little Bobby Tables骄傲。