【问题标题】:CString to LPCTSTR conversion breaks sql queryCString 到 LPCTSTR 的转换中断了 sql 查询
【发布时间】:2015-07-09 16:45:06
【问题描述】:

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

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

【问题讨论】:

  • 你的 unicode 标志打开了吗?当您更改为 MBCS 时会发生什么?

标签: c++ atl c-strings


【解决方案1】:
var = (LPCTSTR)sqlString; // var is LPCTSTR type

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

也就是说,使用绑定参数。不要对 SQL 字符串使用任何类型的字符串格式。真的。使用绑定参数。谷歌它or use wikipedia。让little Bobby Tables自豪。

【讨论】:

  • 谢谢,就是这样,sqlString 超出范围。让我感到羞耻
猜你喜欢
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 2018-03-20
  • 2021-08-13
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多