真烦人。通常,这些字符串似乎很难使用。

我可以这样做:

 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似乎是“新游戏”,因为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/

10-10 10:53