Як виправити помилку "Постачальник іменованих труб, помилка 40 - Не вдалося відкрити з'єднання з" SQL Server "?


152

Я, здається, не можу підключитися до своєї бази даних з сайту. Я отримую цю помилку:

Постачальник іменованих труб, помилка: 40 - Не вдалося відкрити з'єднання з SQL сервером

Я намагався використовувати локальну 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
Нічого собі, студія менеджменту не запустила би мою послугу, навіть якщо вона була встановлена ​​на автоматичний спасибі
johnny 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

Цей ключ є ключовим, не слід забувати, що вам потрібно підключитися до "бази даних", яка розміщена в страховому випадку на сервері. Ця помилка виникає, якщо ви використовуєте для з'єднання лише ім'я хоста сервера та намагаєтесь використовувати ім'я екземпляра як базу даних або навпаки.
MichaelHuelsen

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

49

Це три кроковий процес після установки SQL Server:

  1. Увімкнути іменовані труби SQL Config Manager -> Мережа конфігурації сервера SQL Server -> Протоколи -> Іменовані труби -> Клацніть правою кнопкою миші -> Перезапустити

названі труби увімкнено

  1. Перезавантажте сервер Менеджер налаштувань SQL -> Послуги SQL Server -> Сервер SQL (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: Named Pipes Provider, помилка: 40 - Не вдалося відкрити з'єднання з SQL Server , має досить пристойний перелік можливих проблем, пов’язаних із вашою помилкою. Ви можете побачити, чи може хтось із них бути тим, що ви переживаєте.

  • Неправильне з'єднання рядка, наприклад використання SqlExpress
  • Іменовані труби (NP) не були включені в екземплярі SQL
  • Віддалене з'єднання не ввімкнено
  • Сервер не запущений або вказує на не реальний сервер у вашій рядку з'єднання
  • Інші причини, такі як неправильний контекст безпеки
  • спробуйте основні тести на зв’язок між двома машинами, над якими ви працюєте

Через них, на жаль, це не допомогло. :(
Дамієн

4
Гаразд, зрозумійте це. Виявляється, коли я встановив сервер, я зробив іменований екземпляр. Ви не можете підключитися до названого екземпляра так само, як і до екземпляра за замовчуванням. Отже, джерело даних: localhost \ ім'я екземпляра, який працює. Ще не вдалося пройти з ip адресою, але радимо, нарешті, підключитися.
Демієн

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

10

я щойно увімкнув TCP / IP, VIA, іменовані труби в менеджері конфігурації сервера Sql, мою проблему вирішено, зверніться до цього для отримання додаткової інформації Розв’язання помилок з іменованими трубами 40


мертве посилання. будь-яка інформація про те, що вона сказала?
Кіссакі

7

Використовуйте ім'я SERVER \\ ІНСТАНЦІЯ. Використання подвійного нахилу в моєму проекті вирішило мою проблему.


Цей також працював на мене, але хто-небудь може мені сказати, чому це працювало?
GWR

Я б сказав, що рядок
рятується

Якщо цей рядок знаходиться в коді C #, @"server\instance"або "server\\instance"повинен працювати. Якщо він знаходиться у конфігураційному файлі, ви просто хочете звичайний текстовий сервер \ екземпляр.
Деніз

7

Завдяки Даміану ...

Труби з назвою TCP / IP ... обидва включені

Налаштування веб-сторінки .... (для localhost)

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

5

Були ті самі проблеми. Провів 6 годин, коли довелося мігрувати деякі сервери. Спробував усі наявні пропозиції з цієї теми та інших.

Рішення було таким же простим, як перезапуск сервера!


1
На жаль, перезавантаження сервера вирішило проблему і для мене. Усі інші згадані пропозиції намагалися безрезультатно.
MrShmee

3

у моєму випадку у мене був автономний сервер, я змінив порт порту замовчувань 1433 в сервері sql в диспетчері конфігурацій на деяке число і перезапустив службу обслуговування sql, щоб набути чинності, я зміг підключитися до сервера sql через студію управління, якщо я ввійду на сервер. але я не зміг підключитися зі своєї локальної машини через сервер sql, я отримував помилку:

Під час встановлення з'єднання з SQL-сервером сталася помилка, пов’язана з мережею або окремим екземпляром Сервер не знайдено або був недоступний. Перевірте, чи ім'я екземпляра правильне, і

що SQL Server налаштований для забезпечення віддалених з'єднань. (постачальник: Named Pipes Provider, помилка: 40 - Не вдалося відкрити з'єднання з SQL Server) (Microsoft SQL Server, Помилка: 5)

Я перевірив і перевірив усе нижче

-Установлена ​​названа труба / TCP. -Дозволити з'єднання дозволено -Windows Firewall вимкнено. Створено виняток для портального брандмауера Windows (у моєму випадку це було не потрібно, оскільки сервер знаходиться в одній мережі підмережі). -Увімкнено все в SQL Server Configuration Manager.

тоді я зафіксував номер порту за замовчуванням 1433 і перезапустив сервер sql сервера, і проблема вирішилася, і я можу підключити сервер sql від моєї локальної студії управління.


3

У мене була така ж проблема. Я використовую MSSQL Server Management Studio 2017 і вирішив цю проблему, виконавши наступні кроки:

  1. Перевірте, чи справні послуги SQL Server Services чи ні.
  2. Також перевірте, чи працює в хорошому стані SQL Server (MSSQLSERVER).
  3. Також перевірте справність браузера SQL Server.
  4. Перезапуск сервера SQL (MSSQLSERVER)

і виправити.


3
Дякую за це! Браузер SQL Server був відключений, тому це виправлено для мене!
Сем

2

Спробуйте виконати наступні дії:

  1. Відкрийте вікно "Служби" (відкрийте "запустити" і введіть services.msc).

  2. Шукаємо служби SQL (з префіксом SQL).

  3. Запустіть їх (якщо неможливо почати. ​​Перейдіть до кроку 4).

  4. Клацніть правою кнопкою миші на кожній службі -> Властивості -> Змініть на вкладці "Увійти" -> Виберіть вхід як "Локальний ..." -> 0К. Потім знову запустіть служби 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 і шукав SQLEXPRESS в моїй базі даних. Це було два екземпляри, і я вибрав правильний.

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


1

Якщо ви працюєте з ядром Asp.net і використовуєте appsettings.json, ніж запис сервера як localhost і після написання імені екземпляра sql для включеної імені, названої так

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


1

Якщо ви спробували перезапустити службу MSSQLSERVER, і вона не спрацювала, це може бути рішенням:

Якщо ви використовуєте SQLExpress, ім'я вашого сервера має бути таким, як ComputerName \ SQLExpress. Однак для SQLDeveloper вам не потрібно правити SQLDeveloper після вашого ComputerName.


0

Дотримуючись усіх зазначених тут кроків , якщо він все ще не підключається, спробуйте додати DNS з IP-адресою у файл хостів у папці тощо. Додавання IP-адреси замість імені DNS в рядок з'єднання повинно бути тимчасовим рішенням, щоб перевірити, чи з'єднання насправді працює.


0

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

Так, сайт може спілкуватися з сервером Іменовані труби / TCP включено. Доступні віддалені з'єднання. Брандмауер Windows вимкнений Створено виняток для порту 1433 у брандмауері Windows. Увімкнено все в Менеджері конфігурацій SQL Server.

Я забезпечив і зробив вищезазначене, а також, я просто хочу поділитися, що ДВОЙНА БАКСЛАШ

oBuilder.DataSource = "SPECIFICPCNAME \ SQLEXPRESS";

Використання єдиного BACKSLASH призвело до помилки збірки, тобто: Помилка 1 Нерозпізнана послідовність втечі

Я сподіваюся, що це допоможе наступному хлопцеві - я приніс жертву на вечерю, закуску опівночі і НБА виділяє час, щоб вирішити це (сором)

Дякую [Таміж Вентан] ^ _ ^


0

Увімкніть TCP / Ip, Piped Protocol, перейшовши до Управління комп'ютером -> SQL та сервіси, переконайтеся, що служба увімкнена. Розгорніть порт на Брандмауері. Спробуйте увійти через командний рядок -> як адміністратор; останнє Ім'я користувача має бути (локальним) \ SQLEXPRESS. Сподіваюся, це допомагає.


0

Відкрийте менеджер конфігурацій SQL Server

  1. Виберіть Служби SQL Server справа.
  2. Знайдіть свій сервер праворуч і перейдіть до його властивостей (правою кнопкою миші)
  3. Змініть метод входу в локальну систему.

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

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


0

У мене була та сама проблема і вирішено проблему, відключивши мій брандмауер (ESET).

Першим кроком, щоб вирішити цю проблему, слід спробувати пінгувати власний комп'ютер з іншого комп'ютера. Якщо у вас включений брандмауер, ви, можливо, не зможете самостійно виконати пінг. Я спробував pinging власного ПК, тоді ping не вдалося (не отримав відповідь від сервера)


0

Нижче я запропонував кроки, щоб вирішити вашу проблему Як виправити помилку "Провайдер іменованих труб, помилка 40 - Не вдалося відкрити з'єднання з" SQL Server "

  1. Перевірте, чи справні послуги SQL Server Services чи ні.
  2. Також перевірте, чи працює в хорошому стані SQL Server (MSSQLSERVER) .
  3. Також перевірте справність браузера SQL Server .
  4. Видаліть усі попередні псевдоніми , тепер створюйте нові псевдоніми відповідно до ваших вимог.
  5. Тепер перевірте, чи працює порт 1433 за замовчуванням SQL Server
  6. Далі натисніть на клієнтські протоколи, наприклад, потім натисніть TCP / IP , тепер клацніть правою кнопкою миші, відкрийте Властивість, тут ви зможете переконатися, що ваш робочий стан працює нормально за посиланням SQL 1433 за замовчуванням .
  7. Відкрийте студію керування SQL Server , потім клацніть правою кнопкою миші, натисніть на опцію " Властивість ", а потім натисніть на вкладку " Підключення" , а потім, нарешті, позначте " Дозволити віддалені підключення до цього сервера" .
  8. Перевірте працездатність чи ваш Ping IP-хост .

0

Я намагався додати нове з'єднання у VS2015. Жодна із пропозицій тут не спрацювала. Запідозривши якусь помилку у майстра, тим більше, що SSMS вдалося підключити просто чудово, я вирішив спробувати виправити це. Це спрацювало!

  1. Замість того, щоб додавати з'єднання, використовуйте "Створити нову базу даних SQL Server". Введіть ім’я вашого сервера та випадкове ім'я для нової БД, наприклад "тест".

  2. Припустивши, що це успішно, відкрийте Провідник сервера у VS, знайдіть підключення в даних З'єднання, клацніть правою кнопкою миші та виберіть Змінити підключення.

  3. Змініть "тест" (з кроку 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, "не вдалося зареєструвати ім'я головного сервісу", Null

Для мене це повернуло причину помилки


0

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

Є багато нудних способів вирішити цю проблему відповідно до того, що я прочитав, але інструмент із сайту tweaking.com зміг видалити та замінити / відновити мої файли провайдера WMI (Windows Management Instrumentation).

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

Після виправлення цієї проблеми я зміг підключитися до свого SQL db як локально, так і віддалено.

Сподіваюся, що це комусь допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.