我正在尝试使用以下代码更改Excel DSN使用的默认工作簿:
std::string DSNConfig;
DSNConfig = "DSN=Excel Files";
DSNConfig += '\0';
DSNConfig += "DBQ=";
DSNConfig += outputFile;
DSNConfig += '\0';
DSNConfig += '\0';
if (!::SQLConfigDataSource(NULL, ODBC_CONFIG_DSN, "Excel", DSNConfig.c_str())) {
WORD iError, cbErrorMsg;
DWORD fErrorCode;
char ErrorMsg[1000];
iError = 1;
SQLInstallerError(iError, &fErrorCode, ErrorMsg, sizeof(ErrorMsg), &cbErrorMsg);
throw WplException(Message(ErrorMsg));
}
每次收到错误消息“在注册表中找不到组件”,但用户DSN确实存在时,我可以在DSN管理器中看到它。
显然我缺少了什么,任何人都可以看到吗?
最佳答案
DSNConfig + =“ \ 0”;
不按照您的想法去做。
我假设您正在尝试将'\0'
字符附加到std::string
。但是,这将追加一个空字符串。 std::string::operator +=(const char *)
将在遇到的第一个NUL字符处停止。
解决方法是:
DSNConfig += '\0';
关于c++ - 如何更改Excel DSN的默认工作簿?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51167269/