Вопрос или проблема
Я пытаюсь вручную подключиться к LocalDB (как к службам SQL Server 2019, так и SQL Server 2022), создавая новую базу данных приложения с использованием ADO.NET (Microsoft.Data.SqlClient
).
Каждый раз, когда я пытаюсь подключиться, я получаю общее сообщение об ошибке, в котором говорится, что файл базы данных не может быть прикреплён.
Error.log:
2024-09-17 19:30:18.40 Logon Ошибка: 15350, Уровень: 16, Состояние: 1.
2024-09-17 19:30:18.40 Logon Попытка прикрепить автоматически названную базу данных из файла C:\Temp\CvTest.mdf завершилась неудачей. База данных с таким же именем существует, или указанный файл не может быть открыт, или он находится на UNC-ресурсе.
2024-09-17 19:31:02.66 Logon Ошибка: 15350, Уровень: 16, Состояние: 1.
2024-09-17 19:31:02.66 Logon Попытка прикрепить автоматически названную базу данных из файла C:\Temp\CvTest.mdf завершилась неудачей. База данных с таким же именем существует, или указанный файл не может быть открыт, или он находится на UNC-ресурсе.
При отладке кода источника Microsoft.Data.SqlClient
выяснилось, что следующая ошибка была истинной причиной проблемы:
Установлено соединение с сервером, но произошла ошибка во время
процесса входа. (поставщик: Провайдер именованных каналов, ошибка: 0 - В конце канала нет процесса).
Что вызывает эту ошибку?
Вот моя простая настройка тестового соединения. Это простая строка подключения, которую цитирует каждый пример от Microsoft:
using SqlConnection con = new SqlConnection(@"Data Source=(LocalDb)\MSSQLLocalDB;Integrated Security=SSPI;MultipleActiveResultSets=True;AttachDBFilename=C:\Temp\CvTest.mdf");
con.Open();
Так что она должна работать без проблем. Но это не так.
Используя SSMS, я могу легко подключиться к экземпляру LocalDB и быстро создавать/удалять базы данных, даже с указанным путем.
Я уже обновился с MsLocalDb 15 до MsLocalDb 16, но безрезультатно.
Ответ или решение
Проблема, с которой вы столкнулись, может быть вызвана несколькими факторами при подключении к LocalDB. Судя по вашему описанию и записям в журнале, вы получили две основных ошибки:
- Ошибка связи с именованными трубками (Named Pipes Provider).
- Ошибка при попытке прикрепить базу данных с именем, которое уже существует или файл не может быть открыт.
Шаги для устранения проблемы:
-
Проверьте локальную инсталляцию LocalDB:
Убедитесь, что LocalDB действительно установлен и работает корректно. Вы можете сделать это, запустив команду в командной строке:sqllocaldb info
Это покажет список всех инстансов LocalDB. Если ваш инстанс, например
MSSQLLocalDB
, не отображается в списке, возможно, он не запущен. Запустите его командой:sqllocaldb start MSSQLLocalDB
-
Проверьте доступ к файлу базы данных:
Убедитесь, что файл базы данныхC:\Temp\CvTest.mdf
доступен и не заблокирован другим процессом. Иногда ошибки могут возникнуть, если другой экземпляр SQL Server держит файл открытым. Убедитесь, что файл не используется и доступен для чтения и записи. -
Убедитесь, что база данных не прикреплена:
Если база с тем же именем уже прикреплена к инстансу LocalDB, это может вызвать проблемы. Откройте SQL Server Management Studio (SSMS) и выполните следующий запрос, чтобы проверить, прикреплена ли база данных:SELECT name FROM sys.databases;
Если база данных с именем, указанным в строке подключения, появляется в этом списке, вы можете удалить её из SSMS или открепить с помощью команды:
USE master; DROP DATABASE [ИмяВашейБазыДанных];
-
Проверка строки подключения:
Убедитесь, что строка подключения правильно указывает на ваш экземпляр LocalDB. Попробуйте изменить строку подключения на:using SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Integrated Security=True;AttachDbFilename=C:\Temp\CvTest.mdf");
Обратите внимание, что
Integrated Security=SSPI
может быть заменено наIntegrated Security=True
, если у вас нет дополнительных настроек безопасности. -
Проверка прав доступа:
Убедитесь, что учетная запись, под которой запускается ваше приложение, имеет необходимые права доступа к папкеC:\Temp
и к файлуCvTest.mdf
. -
Проверка служб SQL Server:
Убедитесь, что службы SQL Server запущены и работают корректно. Вы можете проверить это в консоли служб (services.msc) или путем выполнения команд:sqlcmd -S (LocalDB)\MSSQLLocalDB -Q "SELECT @@VERSION"
Если команда выполняется успешно и вы видите версию SQL Server, это указывает на то, что LocalDB работает.
Заключение
Если вы выполнили все эти шаги, а проблема все еще не решена, возможно, стоит проверить, не существует ли конфликтов с другими компонентами или инстансами SQL Server. Также стоит убедиться, что все обновления для SQL Server и .NET установлены и актуальны. Если проблема сохранится, следует рассмотреть вариант обращения в службу поддержки Microsoft или на форумы, где можно получить помощь более целенаправленно с вашей конкретной конфигурацией.