CString 到 LPCTSTR 的转换会中断 sql 查询

CString to LPCTSTR conversion breaks sql query

本文关键字:中断 sql 查询 转换 LPCTSTR CString      更新时间:2023-10-16

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

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

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

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

也就是说,使用绑定参数。不要对 SQL 字符串使用任何类型的字符串格式。真。使用绑定参数。谷歌它或使用维基百科。让小鲍比表感到自豪。