Как изменить книгу по умолчанию для Excel DSN? - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь изменить книгу по умолчанию, используемую моим 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 голосов
/ 04 июля 2018

DSNConfig + = "\ 0";

Не делает то, что вы думаете.

Я предполагаю, что вы пытаетесь добавить символ '\0' к std::string. Однако это добавит пустую строку. std::string::operator +=(const char *) остановится на первом NUL-символе, с которым он столкнется.

Исправление:

DSNConfig += '\0';
...