当前位置: 代码迷 >> 综合 >> error C2664 SQLWCHAR error Under VS2013
  详细解决方案

error C2664 SQLWCHAR error Under VS2013

热度:95   发布时间:2023-11-16 20:51:06.0

首先不得不说,接手别人的代码是一件非常GG的事情,比赛时间也将近了,对此不能进行大改...

自己挖的坑,土不够就自己上!!!


SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.1 DRIVER};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=test;CharSet=gbk;";SQLCHAR ConnStrOut[MAXBUFLEN];

SQLWCHAR是UNICODE模式的双字节字符。

这时候你在VS2013上跑,然后就是一堆error C2664

首先确认工程是否为UNICODE模式,如果是,使用WCHAR之类的双字节字符声明字符串数组或指针(具体看编程环境,各个编程环境定义不一样)。

虽然这玩意在VS2013环境中,不建议使用这个SQL连接代码,这是ODBC的数据库连接方式,二十年前已经被淘汰的。
建议百度"VC ado 连接数据库"获取更多信息。

奈何这个人家2013年写的代码,也只给维护,所以...

正题:只需要

  1. 通常vs项目属性(在项目属性->设定->通用->字符集)设置字符集:

    1. 未设置。VS2008默认ansi编码,VS2010默认字符集是Unicode。
    2. Unicode编码。
    3. 多字节编码。

    注意:只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用。

    Win字符集

  2. 所谓的「ANSI」指的是对应当前系统 locale 的遗留(legacy)编码。Windows 里说的「ANSI」其实是 Windows code pages,这个模式根据当前 locale 选定具体的编码,比如简中 locale 下是 GBK。把自己这些 code page 称作「ANSI」是 Windows 的臭毛病。在 ASCII 范围内它们应该是和 ASCII 一致的。
  3. 所谓的「Unicode」指的是带有 BOM 的小端序 UTF-16。把带有 BOM 的小端序 UTF-16 称作「Unicode」也是 Windows 的臭毛病。Windows 从 Windows 2000 开始就已经支持 surrogate pair 了,所以已经是 UTF-16 了,「UCS-2」这个说法已经不合适了。UCS-2 只能编码 BMP 范围内的字符,从 1996 年起就在 Unicode/ISO 标准中被 UTF-16 取代了(UTF-16 通过蛋疼的 surrogate pair 来编码超出 BMP 的字符)。
  4. 把带 BOM 的 UTF-8 称作「UTF-8」又是 Windows 的臭毛病。如果忽略 BOM,那么在 ASCII 范围内与 ASCII 一致。另请参见:「带 BOM 的 UTF-8」和「无 BOM 的 UTF-8」有什么区别?

化用kasagawa 的笔记 2333

  相关解决方案