我正在尝试使用以下代码更改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/

10-13 05:14