Unicode环境下,SQL语句的编码问题?

ppmmwozuiai 2013-01-06 09:42:08
我的程序使用了SQLExecDirect,由于程序使用了Unicode的缘故,所以SQL语句使用了wchar_t*类型。
现在问题来了,因为SQL中某些字段用了中文,所以拼接字符串的时候使用了_T()转成了宽字符。
但是这样拼出来的SQL语句无法执行。
在网上查了一下,可能是因为_T()转换成的宽字符和wchar_t的默认字符集不同。但是不敢确定是不是因为这样。
下面是那部分的代码:

wchar_t sql3[1024]=_T("INSERT INTO OPER_LOG values('登录','0001','Login','");
_tcscat(sql3,userName);
_tcscat(sql3,_T("',current_timestamp,null,null,'Y','"));
_tcscat(sql3,reportMessage);
_tcscat(sql3,_T("'"));
retcode = SQLExecDirect(pHstmt,sql3 ,SQL_NTS);

其中参数reportMessage传递的是中文信息。把sql打印出来之后发现前面英文没有问题。但是后面中文的部分完全无法识别。导致sql语句不正确。
有没有什么方法能够解决这个问题呢?
...全文
245 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ppmmwozuiai 2013-01-06
  • 打赏
  • 举报
回复
引用 3 楼 oyljerry 的回复:
拼接完成sql3后,再 把sql3转换成ANSI字符串, CW2A()
拼接完的SQL打印出来是: INSERT INTO OPER_LOG values('屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯? 在'登录'那个字段那里就编码错误了。 另:使用CW2A()这个宏需要哪个头文件呢?
oyljerry 2013-01-06
  • 打赏
  • 举报
回复
拼接完成sql3后,再 把sql3转换成ANSI字符串, CW2A()
ok1234567 2013-01-06
  • 打赏
  • 举报
回复
UNICODE 时: SQLExecDirectW(pHstmt,(SQLWCHAR*)sql3,SQL_NTS);
hdg3707 2013-01-06
  • 打赏
  • 举报
回复
你的工程是什么字符集,如果是多字节集,那么你用_T肯定转换成多字节,如果工程是UNICODE,那么_T是自动转换成UNICODE的,这应该不会错,应该可以执行,
ppmmwozuiai 2013-01-06
  • 打赏
  • 举报
回复
问题解决了。迷迷糊糊误打误撞居然解决了。结贴了。虽然不明就里但是还是要感谢楼上几位的帮助。
sumos 2013-01-06
  • 打赏
  • 举报
回复
引用 楼主 ppmmwozuiai 的回复:
本帖最后由 VisualEleven 于 2013-01-06 10:20:09 编辑 我的程序使用了SQLExecDirect,由于程序使用了Unicode的缘故,所以SQL语句使用了wchar_t*类型。 现在问题来了,因为SQL中某些字段用了中文,所以拼接字符串的时候使用了_T()转成了宽字符。 但是这样拼出来的SQL语句无法执行……
你不觉得用_tcscat很麻烦吗? wchar_t str[1024]; wsprintfW(str,L"insert into table values('%s');",name);

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧