Ошибка создания SQL DSN сервера с SQLConfigDataSource: неверные пары ключевое слово-значение - PullRequest
0 голосов
/ 10 января 2020
static bool DBBase::CreateDSN(const TCHAR* sDriver, const TCHAR * sCreateDsnString)
{
    if (SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, sDriver, sCreateDsnString))
    {
        return true;
    }
    else
    {
        WORD wErrNum = 1;
        WORD cbRet;
        DWORD pErr;
        TCHAR szErrMsg[SQL_MAX_MESSAGE_LENGTH];
        while (SQLInstallerError(wErrNum, &pErr, szErrMsg, SQL_MAX_MESSAGE_LENGTH, &cbRet) != SQL_NO_DATA)
        {
            _WRITELOGN(szErrMsg);
            wErrNum++;
        };
        return false;
    }
}

    void test()
{
    const TCHAR* sDriver = _T("SQL Server");
    const TCHAR* sCreateDsnString = _T("DSN=myDSN\0Server=myIP\\MyDbInstance\0Database=myDB\0Trusted_Connection=no\0UID=sa\0PWD=sa\0\0");
    DBBase::CreateDSN(sDriver, sCreateDsnString);
}

Когда Trusted_Connection=yes и без идентификатора пользователя и пароля, это работает. Но когда с идентификатором пользователя и паролем происходит сбой с сообщениями об ошибках:

Неверные пары ключевое слово-значение. Ошибка драйвера ConfigDSN, ConfigDriver или

ConfigTranslator

Я попытался "идентификатор пользователя", "UID" и "Имя пользователя" для поля UID и "Пароль", "PWD" для поля пароля, все не удалось.

1 Ответ

0 голосов
/ 10 января 2020

Драйвер просто не позволяет хранить имя пользователя и пароль как часть DSN, потому что это небезопасно. Поэтому не указывайте атрибуты UID и PWD при создании DSN, атрибуты следует указывать на этапе подключения.

...