Не удается подключиться к LocalDB (поставщик: провайдер именованных каналов, ошибка: 0 – На другом конце канала нет процесса)

Вопрос или проблема

Я пытаюсь вручную подключиться к 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. Судя по вашему описанию и записям в журнале, вы получили две основных ошибки:

  1. Ошибка связи с именованными трубками (Named Pipes Provider).
  2. Ошибка при попытке прикрепить базу данных с именем, которое уже существует или файл не может быть открыт.

Шаги для устранения проблемы:

  1. Проверьте локальную инсталляцию LocalDB:
    Убедитесь, что LocalDB действительно установлен и работает корректно. Вы можете сделать это, запустив команду в командной строке:

    sqllocaldb info

    Это покажет список всех инстансов LocalDB. Если ваш инстанс, например MSSQLLocalDB, не отображается в списке, возможно, он не запущен. Запустите его командой:

    sqllocaldb start MSSQLLocalDB
  2. Проверьте доступ к файлу базы данных:
    Убедитесь, что файл базы данных C:\Temp\CvTest.mdf доступен и не заблокирован другим процессом. Иногда ошибки могут возникнуть, если другой экземпляр SQL Server держит файл открытым. Убедитесь, что файл не используется и доступен для чтения и записи.

  3. Убедитесь, что база данных не прикреплена:
    Если база с тем же именем уже прикреплена к инстансу LocalDB, это может вызвать проблемы. Откройте SQL Server Management Studio (SSMS) и выполните следующий запрос, чтобы проверить, прикреплена ли база данных:

    SELECT name FROM sys.databases;

    Если база данных с именем, указанным в строке подключения, появляется в этом списке, вы можете удалить её из SSMS или открепить с помощью команды:

    USE master;
    DROP DATABASE [ИмяВашейБазыДанных];
  4. Проверка строки подключения:
    Убедитесь, что строка подключения правильно указывает на ваш экземпляр LocalDB. Попробуйте изменить строку подключения на:

    using SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Integrated Security=True;AttachDbFilename=C:\Temp\CvTest.mdf");

    Обратите внимание, что Integrated Security=SSPI может быть заменено на Integrated Security=True, если у вас нет дополнительных настроек безопасности.

  5. Проверка прав доступа:
    Убедитесь, что учетная запись, под которой запускается ваше приложение, имеет необходимые права доступа к папке C:\Temp и к файлу CvTest.mdf.

  6. Проверка служб SQL Server:
    Убедитесь, что службы SQL Server запущены и работают корректно. Вы можете проверить это в консоли служб (services.msc) или путем выполнения команд:

    sqlcmd -S (LocalDB)\MSSQLLocalDB -Q "SELECT @@VERSION"

    Если команда выполняется успешно и вы видите версию SQL Server, это указывает на то, что LocalDB работает.

Заключение

Если вы выполнили все эти шаги, а проблема все еще не решена, возможно, стоит проверить, не существует ли конфликтов с другими компонентами или инстансами SQL Server. Также стоит убедиться, что все обновления для SQL Server и .NET установлены и актуальны. Если проблема сохранится, следует рассмотреть вариант обращения в службу поддержки Microsoft или на форумы, где можно получить помощь более целенаправленно с вашей конкретной конфигурацией.

Оцените материал
Добавить комментарий

Капча загружается...