我正在尝试使用以下代码更改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管理器中看到它。
很明显我缺少了什么,有人可以看到吗?
答案 0 :(得分:3)
DSNConfig + =“ \ 0”;
不按照自己的想法去做。
我假设您正在尝试向'\0'
附加一个std::string
字符。但是,这将追加一个空字符串。 std::string::operator +=(const char *)
将在遇到的第一个 NUL字符处停止。
解决方法是:
DSNConfig += '\0';