真烦人。通常,这些字符串似乎很难使用。
我可以这样做:
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,例如wcsncpy
和wcslen
。当然,我建议您在使用C函数之前使用std::wstring
尽力而为。我还一半期望实际上有使用SQLWCHAR
经验的人知道更好的东西,因此请带一点盐。
关于c++ - 您如何找到SQLWCHAR的长度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24144547/