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骄傲。
我将较大的 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骄傲。