Разница между доступом к SQL Server и .Net по сравнению с Qt - PullRequest
0 голосов
/ 23 января 2019

У меня есть два приложения, которые оба обращаются к одной и той же базе данных.Один написан на C # и использует .NET-сервисы для подключения к базе данных;другой написан на C ++ и использует Qt для подключения.Я не эксперт по закулисным механизмам, поэтому я немного колеблюсь с конкретной проблемой.У меня проблема в том, что приложение .NET отлично работает удаленно, а приложение Qt - нет.

Проблема вызвана проблемой на стороне сервера, где есть некоторая странность с аутентификацией Windows.Приложение .NET подключается без запуска аутентификации Windows, но приложение Qt, очевидно, использует аутентификацию Windows, несмотря на все усилия, которые я предпринял, чтобы ее избежать.Очевидно, что если сервер был исправлен - что, мы надеемся, будет - проблема исчезнет, ​​но у меня есть дополнительное приложение, которое мне нужно создать, которое должно предоставить доступ большему количеству пользователей, и я не могу справиться с этим.Аутентификация Windows для всех из них, поэтому мне нужно выяснить, как вообще избежать аутентификации Windows.

. Приложение .NET использует класс SqlDataAdapter со строкой подключения в формате «Источник данных = xxx.xxx.xxx.xxx; Начальный каталог = nnnn; Сохранять информацию о безопасности = True; ID пользователя = uuuuuu; Пароль = ppppp ".

Приложение Qt использует класс QSqlDatabase и строку подключения в формате "DRIVER = {SQL SERVER}; Сервер = xxx.xxx.xxx.xxx; База данных = nnnn; Идентификатор пользователя = uuuuuu; Пароль = ppppp".

Я пытался использовать формат" Источник данных "с приложением Qt, и он не работает.Я экспериментировал с различными параметрами, предложенными в других статьях (Trusted_Connection и Integrated Security), и независимо от того, что я делаю, приложение Qt всегда использует проверку подлинности Windows или вообще терпит неудачу.Когда происходит сбой, в сообщениях об ошибках указываются нераспознанные параметры в строке подключения.

Я потратил часы на поиск и эксперименты.Для будущего приложения, которое мне нужно написать, использование C # и .NET - жизнеспособный подход, но я гораздо лучше знаком с Qt и получу приложение, написанное намного быстрее, используя этот подход.Мне кажется, что я должен иметь возможность подключиться к серверу без прохождения проверки подлинности Windows, но сейчас я в растерянности.Любые предложения приветствуются.

1 Ответ

0 голосов
/ 26 января 2019

Один из других вопросов на эту тему сообщил, что когда он печатал имя пользователя после сбоя соединения, это было его локальное имя пользователя, а не то, которое он указал в QSqlDatabase :: setUserName. В его случае он добавил имя пользователя и пароль в строку подключения (как в моем исходном примере), чтобы заставить его работать. Его пример также использовал «user_id», в то время как мой имел «User ID». (Я не знаю, являются ли пробелы и подчеркивания в этих вещах взаимозаменяемыми, но у меня такое впечатление.)

Когда я печатал имя пользователя объекта QSqlDatabase после сбоя моего соединения, у меня было пусто, независимо от того, что я поместил в строку соединения. Я не получил ни имя пользователя, которое я указал в строке подключения, ни мой локальный логин.

Его код, который не работал, также назывался QSqlDatabase :: setUserName и QSqlDatabase :: setPassword отдельно от строки подключения. Хотя у него это не сработало, я этого не пробовал, так и сделал, и работает просто отлично.

Так что в его случае сработало помещение аутентификации в строку подключения; в моем случае задание аутентификации для объекта QSqlDatabase сработало.

Хотя я до сих пор не понимаю, почему все это происходит, моя проблема решена, и я могу приступить к написанию своего нового приложения с использованием Qt, которое будет развиваться гораздо быстрее, чем переходить на все скорости. Технология .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...