Как исправить ошибку «Поставщик именованных каналов», ошибка 40 - Не удалось открыть соединение с «SQL Server»?


152

Я не могу подключиться к моей базе данных с сайта. Я получаю эту ошибку:

Поставщик именованных каналов, ошибка: 40 - Не удалось открыть соединение с SQL Server

Я попытался использовать локальный IP-адрес для подключения, а также общедоступный. Я пробовал:

  1. Да, сайт может общаться с сервером
  2. Именованные каналы / TCP включен.
  3. Удаленные подключения разрешены.
  4. Брандмауэр Windows выключен
  5. Создано исключение для порта 1433 в брандмауэре Windows.
  6. Включено все в диспетчере конфигурации SQL Server.

Что еще я могу сделать здесь?


2
Возможно, стоит проверить, действительно ли SQL Server использует порт 1433. Возможно, он использует что-то отличное от порта по умолчанию.
Раджив Шеной

Также убедитесь, что во время пинга, что имя сервера установлено правильно (или хорошо написано). Это была проблема в моем случае!
Янн Шабо

@RajeevShenoy: Как вы можете сказать без связи (в чем проблема)? Я могу сказать порт, когда он подключен, с помощью netstat, но это работает только при наличии соединения.
MSIS

Ответы:


117

Решить эту проблему очень легко:

  1. Перейти к панели управления.
  2. поиск услуг.
  3. Откройте окно Локальные услуги из результатов поиска
  4. Перезапустите службу MSSQLSERVER.

Скриншот шагов:

Скриншот шагов


1
Ничего себе, студия управления не запустила бы мой сервис, даже если он был установлен автоматически. Спасибо
Джонни, 5

Спасибо, это помогло. Буду ли я каждый раз запускать сервис отсюда? Я раньше не должен был.
naz786

3
Что делать, если эти услуги не здесь? Я установил SQL Server 17. Я не вижу этот сервис ....
Ciaran Gallagher

1
Создание резервной копии базы данных 170 ГБ, служба остановлена. Благодаря этому потребовалось всего 5 минут, чтобы перезапустить сервер sql, который использовался важным клиентом. Большое спасибо.
Shondeslitch

2
Все действия проверены, но перезагрузка у меня не сработала. Все еще получаю ту же ошибку.
JayPex,

89

И самое простое решение - проверить, вернулся ли ваш слеш ...

Я потратил около часа, пытаясь выяснить, что не так с SERVER / INSTANCENAME, когда все настроено правильно, именованные каналы, права доступа пользователя ... и вдруг меня поразило, это не косая черта, это обратная косая черта ( \).

Ужас, позор ...


2
У меня была проблема с ОП, и оказалось, что мне не хватает информации SERVER / INSTANCENAME (вместо этого там была точка).
LuxDie

@LuxDie Где вы размещаете SERVER \ INSTANCENAME и где он находится?
tom_mai78101

Этот ключ является ключевым, не следует забывать, что вам необходимо подключиться к «базе данных», которая размещается на сервере insance. Эта ошибка возникает, если вы используете только имя хоста сервера для соединения и пытаетесь использовать имя экземпляра в качестве базы данных или наоборот.
MichaelHuelsen

Решил мою проблему. Рабочая строка подключения: Server=MyServerName\DOLPHIN=Trusted_Connection=True;Database=DolphinPlatformв процессе разработки (C #) я подключался к локально установленному серверу MSSQL 2017, но когда я приступил к его развертыванию, удаленный сервер, установленный поставщиком программного обеспечения, работал как Instance. Я продолжал думать, что это была проблема аутентификации, потому что она работала как служба или что-то еще, пока я не нашел это.
Алан

49

Это действительно трехэтапный процесс после установки SQL Server:

  1. Включить именованные каналы Диспетчер конфигурации SQL -> Сетевой консоль SQL Server -> Протоколы -> Именованные каналы -> Щелкните правой кнопкой мыши -> Перезагрузить

именованные каналы включены

  1. Перезапустите сервер Диспетчер конфигурации SQL -> Службы SQL Server -> SQL Server (SQLEXPRESS) -> Щелкните правой кнопкой мыши -> Перезагрузить

  2. Используйте правильные имена серверов и экземпляров (оба необходимы!) Обычно это будет . \ SQLEXPRESS , например, смотрите скриншот из диалога подключения QueryExpress.

введите описание изображения здесь

Там у вас есть это.


так как у вас есть относительно поздний ответ с высокой оценкой. Что это, когда у вас есть служба, которая нормально взаимодействует с вашим сервером sql, а затем через 3 часа после запуска она начинает получать эту ошибку, которая сохраняется в течение 10 минут или около того. Затем служба продолжает работать, как до ошибки. ???
TS

Это для локальных подключений? Что дополнительно необходимо для работы удаленных соединений через сеть?
Киссаки

19

Я только что установил SQL SERVER 2012 разработчика. Когда я создавал свой первый пакет служб SSIS, я получал эту ошибку каналов, когда пытался создать задачу подключения к данным в средствах данных SQL Server 2012 в окне диспетчера подключений. Я решил с помощью поста выше.

Если выбрать именованный экземпляр и вы называете его именованным экземпляром SSQDatabase1, а имя вашего компьютера - PCX1. Вы должны ввести PCX1 \ SSQDatabase1, а не просто SSQDatabase1, иначе вы получите ошибку именованных каналов.


16

Поток в MSDN Social, Re: поставщик именованных каналов, ошибка: 40 - Не удалось открыть соединение с SQL Server , имеется довольно приличный список возможных проблем, связанных с вашей ошибкой. Возможно, вы захотите узнать, может ли кто-то из них быть тем, что вы испытываете.

  • Неверная строка подключения, например, использование SqlExpress
  • Именованные каналы (NP) не были включены в экземпляре SQL
  • Удаленное соединение не было включено
  • Сервер не запущен или указывает на ненастоящий сервер в строке подключения
  • Другие причины, такие как неправильный контекст безопасности
  • попробуйте базовые тесты соединения между двумя компьютерами, на которых вы работаете

Прошел через них, к сожалению, это не помогло. :(
Дэмиен

4
Ладно, разберись. Оказывается, когда я установил сервер, я сделал именованный экземпляр. Вы не можете подключиться к именованному экземпляру так же, как и к экземпляру по умолчанию. Итак, источник данных: localhost \ имя экземпляра, который работает. Все еще не мог получить это с IP-адресом, но рад наконец соединиться.
Дэмиен

Рад слышать, но из любопытства вы можете подключиться к нему, используя ip.ip.ip.ip/NamedInstance?
Хан,

10

Я только что включил TCP / IP, VIA, Именованные каналы в Sql Server Configuration Manager, Моя проблема была решена, обратитесь к ней для получения дополнительной информации Устранение ошибки именованных каналов 40


мертвая ссылка. Любая информация о том, что он сказал?
Киссаки

7

Используйте SERVER \\ INSTANCE NAME. Использование двойной обратной косой черты в моем проекте решило мою проблему.


Этот также работал для меня, но может кто-нибудь сказать мне, почему это работает?
GWR

Я бы сказал, что строка убегает, но зависит от контекста
mizuki nakeshu

Если эта строка в коде C # @"server\instance"или "server\\instance"должна работать. Если он находится в конфигурационном файле, то вам просто нужен простой текстовый сервер \ экземпляр.
Дениз Скидмор

7

Благодаря Дамиану ...

Именованные каналы TCP / IP ... оба включены

Web Config .... (для локального хоста)

<add name="FooData" connectionString="Data Source=localhost\InstanceName;Initial Catalog=DatabaseName;Integrated Security=True;" providerName="System.Data.SqlClient" />

5

Была такая же проблема. Потратил около 6 часов, когда пришлось перенести несколько серверов. Перепробовал все предложения, доступные по этой теме и другие.

Решение было так же просто, как перезагрузить сервер!


1
К сожалению, сброс сервера также решил проблему для меня. Все другие упомянутые предложения были предприняты безрезультатно.
MrShmee

3

в моем случае у меня был автономный сервер, я изменил порт сервера по умолчанию для порта sql 1433 в диспетчере конфигурации на какое-то число и перезапустил службу sql serve для вступления в силу, я смог подключиться к серверу sql через Management Studio, если я войду в систему на сервер. но я не смог подключиться с моего локального компьютера через сервер SQL, я получаю сообщение об ошибке:

При установлении соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра правильное и

этот SQL Server настроен для разрешения удаленных подключений. (поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server) (Microsoft SQL Server, ошибка: 5)

Я проверил и подтвердил все ниже

-Именованные каналы / TCP включен. -Дистанционные соединения разрешены. -Брандмауэр Windows выключен -Создано исключение для портирования брандмауэра Windows (в моем случае это не было необходимо, так как сервер находится в той же сети подсети). -Включено все в диспетчере конфигурации SQL Server.

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


3

У меня такая же проблема. Я использую MSSQL Server Management Studio 2017 и решил эту проблему, выполнив следующие действия:

  1. Проверить работоспособность служб SQL Server Services или нет.
  2. Также проверьте работоспособность SQL Server (MSSQLSERVER).
  3. Также проверьте работоспособность браузера SQL Server.
  4. Перезапустите SQL Server (MSSQLSERVER)

и исправил это.


3
Спасибо за это! Браузер SQL Server был отключен, так что это исправило это для меня!
Сэм

2

Попробуйте следующие шаги:

  1. Откройте окно «Службы» (откройте «окно запуска» и введите services.msc).

  2. Ищем службы SQL (с префиксом SQL).

  3. Запустите их (если не можете начать. Перейти к шагу 4).

  4. Щелкните правой кнопкой мыши по каждому сервису -> Свойства -> Перейдите на вкладку «Вход в систему» ​​-> выберите вход в систему как «Локальный ...» -> 0K. Затем снова запустите службы SQL.

Попробуйте открыть SQL и подключить базу данных.


2

Скорее всего, вы обнаружите, что имя вашей БД неверно, вы увидите имя сервера в VS как «DESKTOP-0I14BKI», но если вы откроете SSMS, вы увидите DESKTOP-0I14BKI \ SQLBLAHBLAH , просто добавьте « \ SQLBLAHBLAH » (имя экземпляра) ) к вашему "имени сервера" в свойствах подключения VS.

Вы увидите : введите описание изображения здесь

Исправить: введите описание изображения здесь


2

TL; DR; Ваш экземпляр SQL Server использует динамические порты, которые не работают. Заставить SQL Server использовать статический порт # 1433.

Полная информация : во-первых, эта проблема более вероятна, если у вас есть смесь по умолчанию и именованного экземпляра или только именованных экземпляров (что было в моем случае).

Основная концепция . Каждый экземпляр Microsoft SQL Server, установленный на компьютере, использует отдельный порт для прослушивания входящих запросов на подключение. Экземпляр SQL Server по умолчанию использует порт № 1433. Когда вы устанавливаете именованные экземпляры, они начинают использовать динамические порты, которые определяются во время запуска службы Windows, соответствующей именованному экземпляру SQL Server.

Мой код не смог (с кодом ошибки 40) соединиться с единственным именованным экземпляром SQL Server, который был у меня на виртуальной машине. Вы можете попробовать ниже возможные решения:

Решение № 1 : Клиентский код, пытающийся подключиться к экземпляру SQL Server, получает справку из службы браузера SQL Server, чтобы определить номер порта, на котором ваш именованный экземпляр прослушивает входящие подключения. Убедитесь, что на вашем компьютере запущена служба браузера SQL.

Решение №2 . Проверьте номер порта (желтым цветом), который использует ваш именованный экземпляр SQL Server, из диспетчера конфигурации SQL Server, как показано на снимке ниже:

введите описание изображения здесь

Используйте этот номер порта явно в строке подключения или как sqlcmdпоказано ниже:

sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt

Решение № 3 : Принудительно ваш именованный экземпляр использовать порт № 1433, который используется экземпляром по умолчанию. Помните, что это будет работать, только если у вас нет экземпляра SQL Server по умолчанию на вашем компьютере, поскольку экземпляр SQL Server по умолчанию уже использует порт # 1433. Один и тот же номер порта не может использоваться двумя разными службами Windows.

Пометьте TCP Dynamic portsполе как пустое и TCP Portполе до 1433.

введите описание изображения здесь

Измените номер порта в строке подключения, как показано ниже:

sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt

ИЛИ

sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt

Примечание . Каждое изменение настроек TCP / IP требует соответствующего перезапуска службы Windows.

Интересно, что после устранения ошибки, когда я вернулся к настройке динамического порта, чтобы воспроизвести ту же ошибку, тогда это не произошло. Не уверен почему.

Пожалуйста, прочитайте ниже интересные темы, чтобы узнать больше о динамических портах SQL Server:

Как настроить порт SQL Server на нескольких экземплярах?

Когда динамический порт является «динамическим»?

Когда использовать динамический порт TCP, а когда - порт TCP?

Я получил приводит к решению моей проблемы из этого блога.


1

В моем случае я открыл SQL Server Management Studio и искал SQLEXPRESS в своей базе данных. У него было два экземпляра, и я выбрал правильный.

введите описание изображения здесь


1

Если вы работаете с ядром Asp.net и используете appsettings.json, тогда пишите сервер в качестве локального хоста и после записи имени экземпляра sql для включенного именованного канала, как это

  "ConnectionString": {
    "dewDB": "server=localhost\\dewelopersql;database=dewdb;User ID=sa;password=XXXXX",
  },

1

Очень простое решение

использовать (local)\InstanceName это все. это сработало для меня.


1

Если вы попытались перезапустить службу MSSQLSERVER, но она не сработала, это может быть решением:

Если вы используете SQLExpress, вашим именем сервера должно быть следующее имя компьютера \ SQLExpress. Тем не менее, для SQLDeveloper вам не нужно правый SQLDeveloper после вашего ComputerName.


0

После выполнения всех упомянутых здесь шагов , если он все еще не подключается, попробуйте добавить DNS с IP-адресом в файл hosts в папке etc. Добавление IP-адреса вместо DNS-имени в строку подключения должно быть временным решением для проверки, действительно ли работает соединение.


0

Я попытался использовать локальный IP-адрес для подключения, а также общедоступный. Я пробовал:

Да, сайт может связываться с сервером Именованные каналы / TCP включен. Удаленные подключения разрешены. Брандмауэр Windows выключен Создано исключение для порта 1433 в брандмауэре Windows. Включено все в диспетчере конфигурации SQL Server.

Я гарантировал и сделал вышеупомянутое также, и я просто хочу поделиться, что ДВОЙНОЙ БАКСЛАШ

oBuilder.DataSource = "SPECIFICPCNAME \ SQLEXPRESS";

Использование SINGLE BACKSLASH привело к ошибке сборки, т.е.: Ошибка 1 Нераспознанная escape-последовательность

Я надеюсь, что это поможет следующему парню - я пожертвовал ужином, полуночной закуской и NBA выделяет время для решения этой проблемы (позор)

Благодаря [Тамиж Вентхан] ^ _ ^


0

Включите TCP / Ip, Piped Protocol, перейдя в «Управление компьютером» -> «SQL и службы», убедитесь, что служба включена. Enbale порт на брандмауэре. Попробуйте войти через командную строку -> как администратор; последнее имя пользователя должно быть (локально) \ SQLEXPRESS. Надеюсь это поможет.


0

Откройте диспетчер конфигурации SQL Server

  1. Выберите SQL Server Services справа.
  2. Найдите свой сервер справа и перейдите к его свойствам (щелкнув правой кнопкой мыши)
  3. Измените метод входа на локальную систему.

введите описание изображения здесь

введите описание изображения здесь


0

У меня была та же проблема, и я решил ее, отключив брандмауэр (ESET).

Первым шагом для решения этой проблемы должна быть попытка пропинговать ваш собственный компьютер с другого компьютера. Если у вас включен брандмауэр, вы не сможете пинговать себя. Я попытался пропинговать мой собственный компьютер, но затем ping не удался (не получил ответ от сервера)


0

Я предложил ниже шаги для решения вашей проблемы Как я могу исправить ошибку «Поставщик именованных каналов, ошибка 40 - Не удалось открыть соединение с« SQL Server »

  1. Проверить работоспособность служб SQL Server Services или нет.
  2. Также проверьте работоспособность SQL Server (MSSQLSERVER) .
  3. Также проверьте работоспособность браузера SQL Server .
  4. Удалить все предыдущие псевдонимы , а теперь создайте новые псевдонимы в соответствии с вашими требованиями.
  5. Теперь проверьте работу SQL Server Default Port 1433
  6. Затем нажмите на «Клиентские протоколы», затем на TCP / IP , затем щелкните правой кнопкой мыши, откройте «Свойство», здесь вы можете убедиться, что ваш порт по умолчанию SQL 1433 работает нормально .
  7. Откройте SQL Server Management Studio , затем щелкните правой кнопкой мыши, выберите параметр « Свойства », затем перейдите на вкладку « Подключения » и, наконец, установите флажок « Разрешить удаленные подключения к этому серверу» .
  8. Проверьте правильность работы или ваш Ping IP Host .

0

Я пытался добавить новое соединение в VS2015. Ни одно из предложений здесь не сработало. Подозревая какую-то ошибку в мастере, особенно из-за того, что SSMS могла нормально подключаться, я решил попробовать и обмануть. Это сработало!

  1. Вместо добавления соединения используйте «Создать новую базу данных SQL Server». Введите имя вашего сервера и случайное имя для новой БД, например, «тест».

  2. Предполагая, что это успешно, откройте Server Explorer в VS, найдите соединение в Data Connections, щелкните его правой кнопкой мыши и выберите Modify Connection.

  3. Измените «test» (с шага 1) на имя существующей базы данных, к которой вы хотите подключиться. Нажмите «Проверить соединение». На этот раз это должно сработать!

  4. Удалите временную базу данных, созданную на шаге 1.


0

У меня есть еще одно решение, я думаю. Я недавно сменил имя своего компьютера так, после того, как я не смог подключиться после того, как попробовал все вышеперечисленные методы. Я изменил имя сервера .. Имя сервера => (найдите больше) => в ядре базы данных, новый сервер был найден так же, как новое имя компьютера. Это сработало, и жизнь снова стала хорошей.


0

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


0

У меня была эта проблема, но ни одно из предложенных выше предложений не устранило ее.

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


0

Для меня это была проблема с брандмауэром.

Сначала вы должны добавить порт (например, 1444 и, возможно, 1434), но также

C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe

и

%ProgramFiles%\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Binn\SQLAGENT.EXE

Второй раз, когда я получил эту проблему, когда я вернулся к брандмауэру, пути были неправильными, и мне нужно было обновить форму с 12 по 13! Простое нажатие на кнопку обзора на вкладке «Программы и сервисы» помогло понять это.

Наконец, попробуйте запустить команду

EXEC xp_readerrorlog 0,1, "не удалось зарегистрировать имя участника службы", пусто

Для меня вернулась причина ошибки


0

Я попробовал почти все на этой странице, но у меня были некоторые проблемы, которые на самом деле нужно было решить. Я не смог сделать некоторые вещи, такие как открыть Диспетчер конфигурации SQL Server, который в конечном итоге был поврежден / пропал файлы поставщика WMI.

Есть много утомительных способов решить эту проблему в соответствии с тем, что я прочитал, но инструмент tweaking.com смог удалить и заменить / исправить мои файлы поставщика WMI (инструментария управления Windows).

Раньше я занимался ремонтом компьютеров, и в целом инструмент tweaking.com действительно произвел на меня впечатление, и это было предложено на одной из страниц форума ошибок WMI, на которую я зашел.

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

Надеюсь, это кому-нибудь поможет.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.