c++ - 如何找到 SQLWCHAR 的长度?

标签 c++ sql-server odbc

这真的很烦人。一般来说,这些字符串似乎很难处理。

我可以做到:

 std::wstring strdsn = L"stringsaidtwice";
 SQLWCHAR DSName[60] = L"stringsaidtwice";

 retcode = SQLConnect(connHandle, DSName, strdsn.length(), NULL,
    0, NULL, 0);

这不起作用:

 sizeof(DSName);
 sizeof(DSName)*sizeof(SQLWCHAR);

也许修剪它然后 sizeof() ?

呃。显然不是正确的做法。但是基本操作,如调整大小、从“普通”字符串复制,似乎真的很难用 SQLWCHAR。

注意:ODBC 似乎是"new"游戏,因为 MS 正在抛弃 OLE DB 而 EF 很慢。 (截至 2014 年 6 月)。

更新:好的,这里是使用 SQLWCHARS 所需的基本工具

    // To convert an ordinary string to a SQLWCHAR
    char  regcstring[120] = "mystringinput";  //regular char * input
    const size_t WCHARBUFSIZE = 120;
    SQLWCHAR  DSName[WCHARBUFSIZE];
    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, regcstring, -1, DSName, WCHARBUFSIZE);

    // To provide the size of a SQLWCHAR (wchar_t)
retcode = SQLConnect(connHandle, DSName, std::wcslen(DSName), NULL,
    0, NULL, 0);

嗯,这对我有帮助,至少.....

最佳答案

如果 SQLWCHAR 应该以与标准宽字符串相同的方式工作,您可以使用 standard wide string C functions例如 wcsncpywcslen。当然,我会建议在求助于 C 函数之前,尽你所能地使用 std::wstring。我也有一半希望真正有使用 SQLWCHAR 经验的人知道更好的东西,所以对此持保留态度。

关于c++ - 如何找到 SQLWCHAR 的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24144547/

相关文章:

Java MySQL ODBCPreparedStatement 切断查询

SAS Teradata ODBC 时间戳

c++ - 使用 ATL 将 LPTSTR 转换为 LPWSTR

java - double 在不同语言中是不同的

c++ - 如何创建可调整大小和固定大小容器的变体

mysql - 我需要从 3 个不同的表中检索单个列

java - SQLException 参数 #7 尚未设置

c++ - 当程序在两者之间进入休眠状态时,OpenCV 函数 cv::remap() 的执行时间更长

sql-server - 如何将 SQL BACKUP 命令的结果输出获取到 Delphi 程序中?

php - CodeIgniter ODBC 问题