Почему я не могу заставить свой объект CDatabase понимать мое имя источника данных? - PullRequest
1 голос
/ 07 апреля 2009

Я использую базу данных CD класса MFC. Чтобы установить соединение с SQL Server, я вызываю OpenEx () со строкой соединения. Моя проблема заключается в том, что объект не может интерпретировать часть строки DSN. Строка подключения выглядит следующим образом:

 ODBC;DSN=mySystemDSN;UID=myUsername;WSID=myMachineName;DATABASE=myDatabaseName;Trusted_Connection=Yes

Это должно быть правильно, потому что я получил его, используя OpenEx (NULL), выбирая источник данных вручную, а затем вызывая GetConnect ().

Но эта строка, похоже, не содержит достаточно информации: OpenEx () всегда выскакивает диалог, запрашивая больше. Кажется, не имеет значения, что я выбираю из этого диалога - я могу выбрать DSN, связанный с совершенно другой базой данных, и все еще работает (вызов GetConnect () в этой ситуации показывает, что он использует мою строку подключения, кроме DSN часть, заимствованная из другого источника данных).

Мне нужно, чтобы мое приложение могло автоматически подключаться к базе данных - диалоговые окна нарушают правила. Я пробовал подключение без DSN с похожими результатами. Что здесь происходит, и что я могу с этим поделать?

изменить в ответ на вопрос Нила Баттерворта:

Информация, которую я предоставил при создании DSN в Администраторе источника данных ODBC, была следующей:

драйвер: SQL Server
имя: mySystemDSN
сервер: myMachineName
тип аутентификации (может быть Windows или SQL Server): Windows
флажок «Подключиться к SQL Server для получения настроек по умолчанию для дополнительных параметров конфигурации»: отмечен
флажок «Изменить базу данных по умолчанию»: отмечен галочкой и выбрано myDatabaseName из выпадающего меню
флажок «Использовать идентификаторы в кавычках ANSI»: отмечен
флажок «Использовать пустые значения, отступы и предупреждения ANSI»: отмечен
флажок «Выполнять перевод для символьных данных»: отмечен

Ответы [ 4 ]

2 голосов
/ 07 апреля 2009

Похоже, вам не хватает пароля и имени хоста сервера. Я полагаю, интересный вопрос: какую информацию вы вводили в диалоговом окне для создания DSN?

Редактировать: Возможно, вы также захотите взглянуть на этот сайт , на котором много примеров строк подключения.

Edit2: Я бы удалил "ODBC;" в начале строки. Если это не сработает, я бы изменил тип аутентификации в DSN на SQL-сервер и явно указал бы идентификатор пользователя и пароль, просто чтобы убедиться, что аутентификация не является проблемой. И тогда я бы, наверное, сдался: -)

1 голос
/ 07 апреля 2009

Благодаря Нилу Баттеруорту я нашел рабочий ответ здесь :

"Драйвер = {Собственный клиент SQL}; Сервер = myMachineName; База данных = myDatabaseName; Trusted_Connection = yes;"

Я все еще озадачен тем, почему вызов GetConnect (), когда соединение работает, не создает идеальную строку DSN, но теперь, когда у меня есть решение без DSN, мне все равно!

0 голосов
/ 16 ноября 2009

для создания строк соединений я использую www.connectionstrings.com. Фантастически подходит для создания строк подключения во всех вариантах и ​​в базе данных

0 голосов
/ 07 апреля 2009

Некоторые опции:

  • Это системный или пользовательский DSN? То есть DSN виден исполняющему пользователю?
  • Попробуйте удалить UID=myUsername
  • Попробуйте Driver=ODBC вместо ODBC

Почему вы используете DSN, а не более обычную, автономную строку подключения? Такие как Driver=SQLOLEBD;WSID=myMachineName;DATABASE=myDatabaseName;Trusted_Connection=Yes;

...