这真的很烦人。一般来说,这些字符串似乎很难处理。
我可以做到:
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例如 wcsncpy
和 wcslen
。当然,我会建议在求助于 C 函数之前,尽你所能地使用 std::wstring
。我也有一半希望真正有使用 SQLWCHAR
经验的人知道更好的东西,所以对此持保留态度。
关于c++ - 如何找到 SQLWCHAR 的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24144547/