Unicode环境上,SQL语句的编码有关问题

Unicode环境下,SQL语句的编码问题?
本帖最后由 VisualEleven 于 2013-01-06 10:20:09 编辑
我的程序使用了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语句不正确。
有没有什么方法能够解决这个问题呢?
Unicode sql

------解决方案--------------------
你的工程是什么字符集,如果是多字节集,那么你用_T肯定转换成多字节,如果工程是UNICODE,那么_T是自动转换成UNICODE的,这应该不会错,应该可以执行,
------解决方案--------------------
UNICODE 时:
SQLExecDirectW(pHstmt,(SQLWCHAR*)sql3,SQL_NTS);
------解决方案--------------------
拼接完成sql3后,再 把sql3转换成ANSI字符串, CW2A()
------解决方案--------------------
引用:
本帖最后由 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);