真的很烦人。一般来说,这些字符串似乎很难使用。
我可以这样做:
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()?
唉。显然不是正确的事情。但基本的操作,如尺寸调整,复制正常'使用SQLWCHARs时,字符串似乎很难回避。
注意: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);
嗯,这对我很有帮助,至少.....
答案 0 :(得分:1)
如果SQLWCHAR
的工作方式与标准宽字符串的工作方式相同,则可以使用wcsncpy
,例如wcslen
和std::wstring
。当然,我建议您在使用C函数之前使用SQLWCHAR
执行操作。我也有一半期望某人真正有使用{{1}}的经验来更好地了解某些事情,所以请稍等一下。