如何更改Excel DSN的默认工作簿?

时间:2018-07-04 06:39:05

标签: c++ excel windows dsn

我正在尝试使用以下代码更改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管理器中看到它。

很明显我缺少了什么,有人可以看到吗?

1 个答案:

答案 0 :(得分:3)

  

DSNConfig + =“ \ 0”;

不按照自己的想法去做。

我假设您正在尝试向'\0'附加一个std::string字符。但是,这将追加一个空字符串。 std::string::operator +=(const char *)将在遇到的第一个 NUL字符处停止。

解决方法是:

DSNConfig += '\0';