2016-10-27 3 views
1

я разработал C Применение # WPF, я использую MDF файл базы данных, моя строка подключения выглядит следующим образом:Не удалось открыть Databse просьбе логин, Логин не удалось, Логин не удалось пользователю

Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\appDataBase.mdf;Integrated Security=True;Connect Timeout=30

здесь я заменяем | DataDirectory | с папка appdata пользователя.

файл базы данных находится в папке AppData пользователя, я создал установку, которая копирует .mdf файл в _users AppData папку при установке его в компьютер клиента, он прекрасно работает
, но когда я удалений и переустановить его , я не могу подключить этот файл, получаю ошибку:

Can't open database "C:/users/myusername/appdata/roaming/myapplication/database/appDataBase.mdf" requested by login, login failed, login failed for user..

файла есть, но как-то используется сервер SQL и не может открыть его. также при запуске приложения каждый раз, когда я создаю резервную копию этого файла, что один и сбой с ошибкой

System.IO.IOException: The process cannot access the file 'C:\Users\myusername\AppData\Roaming\myapplication\Database\appDataBase.mdf' because it is being used by another process.

Может кто-нибудь дать мне точное решение, потому что я должен использовать LocalDB только на моем компьютере клиента, я не» я хочу, чтобы они позволили сделать какую-либо дополнительную конфигурацию для установки моего приложения, i.am все еще сталкивается с iasue после того, как я изменил свой код, чтобы закрыть соединение db на событии закрытия главного окна.

ответ

1

Этот тип вещей происходит потому, что один из объектов, который использует эту базу данных, все еще работает в фоновом режиме, поэтому, пожалуйста, удалите все связанные с базой данных экземпляры, также удалите и закройте весь объект, связанный с базой данных, в catch().

Try catch поможет вам определить точный номер строки, где вы получаете ошибку, а также показать, из-за какого объекта вы получаете ошибку.

Если вы хотите проверить, почему это происходит, откройте диспетчер задач и обратите внимание на службы там, вы определенно найдете службу, которая содержит объект для базы данных.

+0

поэтому, когда приложение запускается, мне нужно проверить наличие открытого подключения к файлу mdf? и отключиться, если он был открыт от последнего выполнения? –

+0

Нет, просто введите свой код в try catch и удалите и закройте весь объект в try, а также в catch, чтобы он никогда не создавал ту же проблему. Поскольку поиск экземпляра и его закрытие - это не очень хорошая практика. Может быть, вы открыли соединение для базы данных и забыли закрыть его. –

+0

Я исследовал и обнаружил, что я не должен использовать (LocalDB) \ v11.0, вместо этого он должен быть .SQLEXPRESS, я устанавливаю SQL express на клиентском компьютере, указывая в своих предварительных требованиях к приложениям, и он работает в первый раз с (LocalDB) \ v11.0, –

Смежные вопросы