Jak naprawić błąd „Dostawca nazwanych potoków, błąd 40 - nie można otworzyć połączenia z serwerem SQL”?


152

Nie mogę połączyć się z bazą danych z witryny. Otrzymuję ten błąd:

Dostawca nazwanych potoków, błąd: 40 - nie można otworzyć połączenia z programem SQL Server

Próbowałem użyć lokalnego adresu IP do połączenia, a także publicznego. Próbowałem:

  1. Tak, witryna może komunikować się z serwerem
  2. Nazwane potoki / TCP jest włączone.
  3. Połączenia zdalne są dozwolone.
  4. Zapora systemu Windows jest wyłączona
  5. Utworzono wyjątek dla portu 1433 w Zaporze systemu Windows.
  6. Włączono wszystko w programie SQL Server Configuration Manager.

Co jeszcze mogę tutaj zrobić?


2
Warto sprawdzić, czy SQL Server faktycznie używa portu 1433. Może używać innego portu niż domyślny.
Rajeev Shenoy

Upewnij się również, podczas pingowania, że ​​nazwa serwera jest poprawnie ustawiona (lub dobrze napisana). To był problem w moim przypadku!
Yann Chabot

@RajeevShenoy: Jak możesz to stwierdzić bez połączenia (na czym polega problem)? Mogę powiedzieć port, gdy jest podłączony, za pomocą netstat, ale działa to tylko wtedy, gdy jest połączenie.
MSIS

Odpowiedzi:


117

Rozwiązanie tego problemu jest bardzo łatwe:

  1. Przejdź do panelu sterowania.
  2. szukaj usług.
  3. Otwórz okno Usługi lokalne z wyników wyszukiwania
  4. Uruchom ponownie usługę MSSQLSERVER.

Zrzut ekranu przedstawiający kroki:

Zrzut ekranu przedstawiający kroki


1
Wow, Management studio nie uruchomiło mojej usługi, mimo że była ustawiona na automatyczne dziękuję
johnny 5

Dzięki, pomogło. Czy będę musiał za każdym razem uruchamiać usługę stąd? Wcześniej nie musiałem.
naz786

3
A jeśli tych usług nie ma tutaj? Zainstalowałem SQL Server 17. Nie widzę tej usługi ....
Ciaran Gallagher

1
Wykonanie kopii zapasowej bazy danych 170 GB usługa zatrzymała się. Dzięki temu ponowne uruchomienie serwera sql, z którego korzystał ważny klient, zajęło tylko 5 minut. Dziękuję Ci bardzo.
Shondeslitch

2
Wszystkie akcje zaznaczone, ale ponowne uruchomienie nie zadziałało. Nadal pojawia się ten sam błąd.
JayPex

89

I najprostsze rozwiązanie - sprawdź, czy wrócił ukośnik ...

Spędziłem około godziny próbując dowiedzieć się, co jest nie tak z SERWEREM / NAZWA INSTANCJI, gdy wszystko jest poprawnie skonfigurowane, nazwane potoki, prawa dostępu użytkownika ... i nagle mnie uderzyło, to nie jest ukośnik, to ukośnik odwrotny (\ ).

Horror, wstyd ...


2
Miałem problem z OP i okazało się, że brakuje mi informacji o SERWERZE / NAZWIE INSTANCENY (zamiast tego była tam kropka).
LuxDie

@LuxDie Gdzie wstawiasz SERVER \ INSTANCENAME w i gdzie się znajduje?
tom_mai78101

To jest klucz, nie należy zapominać, że musisz połączyć się z "bazą danych", która jest hostowana na serwerze. Ten błąd jest zgłaszany, jeśli używasz tylko nazwy hosta serwera do połączenia i próbujesz użyć nazwy instancji jako bazy danych lub odwrotnie.
MichaelHuelsen

Rozwiązałem mój problem. Działające parametry połączenia: Server=MyServerName\DOLPHIN=Trusted_Connection=True;Database=DolphinPlatformPodczas opracowywania (C #) łączyłem się z lokalnie zainstalowanym serwerem MSSQL 2017, ale kiedy poszedłem go wdrożyć, zdalny serwer zainstalowany przez dostawcę oprogramowania działał jako Instance. Ciągle myślałem, że to problem z uwierzytelnianiem, ponieważ działał jako usługa lub coś, dopóki tego nie znalazłem.
Alan

49

Po zainstalowaniu SQL Server jest to trzyetapowy proces:

  1. Włącz Menedżer konfiguracji potoków nazwanych SQL Server -> Konsolidacja sieci SQL Server -> Protokoły -> Potoki nazwane -> Kliknij prawym przyciskiem myszy -> Uruchom ponownie

nazwane potoki włączone

  1. Uruchom ponownie serwer SQL Config Manager -> SQL Server Services -> SQL Server (SQLEXPRESS) -> Kliknij prawym przyciskiem myszy -> Uruchom ponownie

  2. Użyj odpowiednich nazw serwera i instancji (obie są potrzebne!). Zwykle byłoby to . \ SQLEXPRESS , na przykład zobacz zrzut ekranu z okna dialogowego połączenia QueryExpress.

wprowadź opis obrazu tutaj

Masz to.


ponieważ otrzymałeś stosunkowo późną odpowiedź, która uzyskała wysoki wynik Co to jest, gdy masz usługę, która komunikuje się z serwerem sql dobrze, po 3 godzinach jej działania zaczyna pojawiać się ten błąd, który utrzymuje się przez około 10 minut. Następnie usługa działa dalej jak przed wystąpieniem błędu. ???
TS

To jest dla połączeń lokalnych? Co jest dodatkowo potrzebne, aby połączenia zdalne przez sieć działały?
Kissaki

19

Właśnie zainstalowałem programistę SQL SERVER 2012. Kiedy tworzyłem swój pierwszy pakiet SSIS, otrzymałem ten błąd potoku, gdy próbowałem utworzyć zadanie połączenia danych w SQL Server 2012 Data Tools w oknie Menedżer połączeń. Rozwiązałem za pomocą powyższego postu.

Jeśli wybierzesz nazwaną instancję i wywołasz nazwaną instancję SSQDatabase1, a nazwa twojego komputera to PCX1. Musisz wprowadzić PCX1 \ SSQDatabase1, a nie tylko SSQDatabase1, w przeciwnym razie zostanie wyświetlony błąd nazwanych potoków.


16

Wątek w witrynie MSDN Social, Re: Named Pipes Provider, błąd: 40 - Nie można otworzyć połączenia z serwerem SQL , ma całkiem przyzwoitą listę możliwych problemów związanych z Twoim błędem. Możesz chcieć sprawdzić, czy któryś z nich może być tym, czego doświadczasz.

  • Nieprawidłowe parametry połączenia, takie jak użycie SqlExpress
  • Potoki nazwane (NP) nie zostały włączone w wystąpieniu SQL
  • Połączenie zdalne nie zostało włączone
  • Serwer nie został uruchomiony lub w parametrach połączenia wskazuje, że nie jest to prawdziwy serwer
  • Inne powody, takie jak nieprawidłowy kontekst zabezpieczeń
  • wypróbuj podstawowe testy łączności między dwoma maszynami, na których pracujesz

Przeszedłem przez nie, niestety to nie pomogło. :(
Damien,

4
Ok, wymyśl to. Okazuje się, że po zainstalowaniu serwera wykonałem nazwane wystąpienie. Nie możesz połączyć się z nazwaną instancją w taki sam sposób, jak z instancją domyślną. A więc źródło danych: localhost \ nazwa działającej instancji. Nadal nie mogłem go uruchomić z adresem IP, ale cieszę się, że w końcu się połączę.
Damien

Miło mi to słyszeć, ale czy z ciekawości możesz się z nim połączyć za pomocą ip.ip.ip.ip/NamedInstance?
Khan


7

Użyj SERWER \\ NAZWA INSTANCJI. Użycie podwójnego odwrotnego ukośnika w moim projekcie rozwiązało mój problem.


Ten również działał dla mnie, ale czy ktoś może mi powiedzieć, dlaczego to zadziałało?
GWR

Powiedziałbym, że ciąg ucieka, ale zależy to od kontekstu
mizuki nakeshu

Jeśli ten ciąg jest w kodzie C # @"server\instance"lub "server\\instance"powinien działać. Jeśli jest w pliku konfiguracyjnym, potrzebujesz tylko zwykłego serwera tekstowego \ instance.
Denise Skidmore

7

Dzięki Damianowi ...

Potoki nazwane TCP / IP ... oba włączone

Web Config… (dla localhost)

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

5

Miałem ten sam problem. Spędziłem około 6 godzin, kiedy musiałem przeprowadzić migrację niektórych serwerów. Wypróbowałem wszystkie sugestie dostępne na ten temat i inne.

Rozwiązanie było tak proste, jak restart serwera!


1
Niestety, zresetowanie serwera również rozwiązało problem. Wszystkie inne wspomniane sugestie zostały podjęte bezskutecznie.
MrShmee,

3

w moim przypadku miałem samodzielny serwer, zmieniłem domyślny port serwera sql 1433 w menedżerze konfiguracji na jakiś numer i zrestartowałem usługę sql servis, aby zaczęła obowiązywać, mogłem połączyć się z serwerem sql przez Management Studio, jeśli się zalogowałem na serwer. ale nie mogłem połączyć się z mojego komputera lokalnego przez serwer sql, pojawia się błąd:

Podczas nawiązywania połączenia z programem SQL Server wystąpił błąd związany z siecią lub wystąpieniem. Serwer nie został znaleziony lub nie był dostępny. Sprawdź, czy nazwa instancji jest poprawna i

że SQL Server jest skonfigurowany do zezwalania na połączenia zdalne. (dostawca: Dostawca nazwanych potoków, błąd: 40 - Nie można otworzyć połączenia z serwerem SQL) (Microsoft SQL Server, błąd: 5)

Sprawdziłem i zweryfikowałem wszystkie poniższe

-Potoki nazwane / TCP jest włączone. - Połączenia zdalne są dozwolone. -Windows Firewall jest wyłączony -Utworzono wyjątek dla portu w Windows Firewall (nie było to konieczne w moim przypadku, ponieważ serwer znajduje się w tej samej podsieci). -Włączono wszystko w programie SQL Server Configuration Manager.

Następnie zmieniłem numer portu z powrotem na domyślny 1433 i zrestartowałem usługę serwera sql, a problem został rozwiązany i mogę połączyć się z serwerem sql z mojego lokalnego studia zarządzania.


3

Miałem ten sam problem. Używam MSSQL Server Management Studio 2017 i rozwiązałem ten problem, wykonując następujące kroki:

  1. Sprawdź, czy działają poprawnie usługi SQL Server Services, czy nie.
  2. Sprawdź również, czy działa w dobrym stanie SQL Server (MSSQLSERVER).
  3. Sprawdź również, czy działa poprawnie Przeglądarka SQL Server.
  4. Uruchom ponownie SQL Server (MSSQLSERVER)

i naprawiłem to.


3
Dzięki za to! Przeglądarka SQL Server została wyłączona, więc to rozwiązało problem!
Sam

2

Spróbuj wykonać następujące czynności:

  1. Otwórz okno usług (otwórz pole uruchamiania i wpisz services.msc).

  2. Szukam usług SQL (z prefiksem SQL).

  3. Uruchom je (jeśli nie możesz ich uruchomić. Przejdź do kroku 4).

  4. Kliknij prawym przyciskiem myszy każdą usługę -> Właściwości -> Przejdź do zakładki „Zaloguj” -> wybierz logowanie jako „Lokalne ...” -> 0K. Następnie ponownie uruchom usługi SQL.

Wypróbuj Open SQL i połącz bazę danych.


2

Najprawdopodobniej twoja nazwa DB jest nieprawidłowa, zobaczysz nazwę serwera w VS, np. "DESKTOP-0I14BKI", ale jeśli otworzysz SSMS, zobaczysz DESKTOP-0I14BKI \ SQLBLAHBLAH , po prostu dodaj " \ SQLBLAHBLAH " (nazwa instancji ) do „nazwy serwera” we właściwościach połączenia VS.

Zobaczysz : wprowadź opis obrazu tutaj

Naprawić: wprowadź opis obrazu tutaj


2

TL; DR;Twoja instancja programu SQL Server używa portów dynamicznych, które nie działają. Wymuś program SQL Server, aby używał portu statycznego nr 1433.

Uzupełnij szczegóły : Przede wszystkim ten problem jest bardziej prawdopodobny, jeśli masz połączenie domyślnej i nazwanej instancji lub tylko nazwane instancje (co było moim przypadkiem).

Kluczowa koncepcja : każde wystąpienie programu Microsoft SQL Server zainstalowane na komputerze używa innego portu do nasłuchiwania żądań połączeń przychodzących. Domyślna instancja SQL Server korzysta z portu nr 1433. Po zainstalowaniu nazwanych instancji zaczną one używać portów dynamicznych, co jest ustalane podczas uruchamiania usługi Windows odpowiadającej nazwanej instancji SQL Server.

Mój kod nie mógł połączyć się z jedyną nazwaną instancją SQL Server na mojej maszynie wirtualnej (kod błędu 40). Możesz wypróbować poniżej możliwe rozwiązania:

Rozwiązanie nr 1 : Kod klienta próbujący połączyć się z wystąpieniem SQL Server korzysta z pomocy usługi przeglądarki SQL Server w ustaleniu numeru portu, na którym nazwane wystąpienie nasłuchuje połączeń przychodzących. Upewnij się, że usługa przeglądarki SQL jest uruchomiona na Twoim komputerze.

Rozwiązanie nr 2 : Sprawdź numer portu (w kolorze żółtym), którego używa nazwana instancja programu SQL Server w menedżerze konfiguracji programu SQL Server, jak pokazano na poniższej migawce:

wprowadź opis obrazu tutaj

Użyj tego numeru portu jawnie w ciągu połączenia lub z sqlcmdpokazanymi poniżej:

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

Rozwiązanie nr 3 : Wymuś nazwane wystąpienie korzystania z portu 1433, który jest używany domyślnie. Pamiętaj, że zadziała to tylko wtedy, gdy nie masz żadnego domyślnego wystąpienia programu SQL Server na swoim komputerze, ponieważ domyślna instancja programu SQL Server będzie już używać portu nr 1433. Ten sam numer portu nie może być używany przez dwie różne usługi systemu Windows.

Zaznacz TCP Dynamic portspole jako puste i TCP Portpole na 1433.

wprowadź opis obrazu tutaj

Zmień numer portu w parametrach połączenia, jak pokazano poniżej:

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

LUB

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

Uwaga : każda zmiana ustawień TCP / IP wymaga odpowiedniego ponownego uruchomienia usługi Windows.

Co ciekawe, po usunięciu błędu, gdy wróciłem do dynamicznego ustawienia portu, aby odtworzyć ten sam błąd, to się nie stało. Nie pewny dlaczego.

Przeczytaj poniżej interesujące wątki, aby dowiedzieć się więcej o dynamicznych portach SQL Server:

Jak skonfigurować port SQL Server w wielu instancjach?

Kiedy port dynamiczny jest „dynamiczny”?

Kiedy używać portu dynamicznego TCP, a kiedy portu TCP?

Otrzymałem wskazówki do rozwiązania mojego problemu z tego bloga.


1

W moim przypadku otworzyłem SQL Server Management Studio i szukałem SQLEXPRESS w moim silniku bazy danych. Miał dwa wystąpienia i wybrałem właściwy.

wprowadź opis obrazu tutaj


1

Jeśli pracujesz z rdzeniem Asp.net i korzystasz z appsettings.json, zapisz serwer jako localhost, a po zapisaniu nazwy instancji sql dla włączonego nazwanego potoku, takiego jak ten

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


1

Jeśli próbowałeś ponownie uruchomić usługę MSSQLSERVER i nie zadziałało, może to być rozwiązanie:

Jeśli używasz SQLExpress, nazwa serwera powinna być następująca: NazwaKomputera \ SQLExpress. Jednak w przypadku SQLDeveloper nie musisz poprawiać SQLDeveloper po nazwie ComputerName.


0

Po wykonaniu wszystkich wymienionych tutaj kroków , jeśli nadal się nie łączy, spróbuj dodać DNS z adresem IP w pliku hosts w folderze etc. Dodanie adresu IP zamiast nazwy DNS w ciągu połączenia powinno być tymczasowym rozwiązaniem, aby sprawdzić, czy połączenie faktycznie działa.


0

Próbowałem użyć lokalnego adresu IP do połączenia, a także publicznego. Próbowałem:

Tak, lokacja może komunikować się z serwerem. Nazwane potoki / TCP jest włączony. Połączenia zdalne są dozwolone. Zapora systemu Windows jest wyłączona Utworzono wyjątek dla portu 1433 w Zaporze systemu Windows. Włączono wszystko w programie SQL Server Configuration Manager.

Zapewniłem i zrobiłem to również i chcę tylko podzielić się tym DOUBLE BACKSLASH

oBuilder.DataSource = "SPECIFICPCNAME \ SQLEXPRESS";

Użycie POJEDYNCZEGO klawisza BACKSLASH spowodowało błąd kompilacji, tj .: Błąd 1 Nierozpoznana sekwencja ucieczki

Mam nadzieję, że to pomoże następnemu facetowi - poświęciłem obiad, przekąskę o północy i najważniejsze wydarzenia NBA, aby rozwiązać ten problem (szkoda)

Dzięki [Tamizh venthan] ^ _ ^


0

Włącz protokół TCP / Ip, protokół potokowy, przechodząc do Zarządzanie komputerem -> SQL i usługi, upewnij się, że usługa jest włączona. Zwiększ port w zaporze. Spróbuj zalogować się przez wiersz polecenia -> jako administrator; na koniec nazwa użytkownika powinna być (lokalna) \ SQLEXPRESS. Mam nadzieję że to pomoże.


0

Otwórz Menedżera konfiguracji programu SQL Server

  1. Wybierz usługi SQL Server z prawej strony.
  2. Znajdź swój serwer od prawej i przejdź do jego właściwości (prawym przyciskiem myszy)
  3. Zmień metodę logowania na system lokalny.

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj


0

Miałem ten sam problem i rozwiązałem go, wyłączając zaporę ogniową (ESET).

Pierwszym krokiem do rozwiązania tego problemu powinna być próba pingowania własnego komputera z innego komputera. Jeśli masz włączoną zaporę, możesz nie być w stanie wykonać polecenia ping. Próbowałem pingować swój komputer, ale ping nie powiódł się (nie otrzymałem odpowiedzi z serwera)


0

Zasugerowałem poniższe kroki, aby rozwiązać problem Jak naprawić błąd „Dostawca nazwanych potoków, błąd 40 - nie można otworzyć połączenia z serwerem SQL

  1. Sprawdź, czy działają poprawnie usługi SQL Server Services, czy nie.
  2. Sprawdź również, czy działa w dobrym stanie SQL Server (MSSQLSERVER) .
  3. Sprawdź również, czy działa poprawnie Przeglądarka SQL Server .
  4. Usuń wszystkie wcześniejsze aliasy , teraz utwórz nowe aliasy zgodnie ze swoimi wymaganiami.
  5. Teraz sprawdź, czy działa domyślny port 1433 programu SQL Server
  6. Następnie kliknij Protokoły klienta w instancji, następnie kliknij TCP / IP , teraz kliknij prawym przyciskiem myszy, otwórz Właściwość, tutaj możesz zapewnić prawidłowe działanie domyślnego portu SQL 1433 .
  7. Otwórz SQL Server Management Studio , a następnie kliknij prawym przyciskiem myszy, kliknij opcję „ Właściwość ”, a następnie kliknij kartę Połączenia , a następnie zaznacz opcję Zezwalaj na połączenia zdalne z tym serwerem .
  8. Sprawdź, czy działa poprawnie lub Twój host Ping IP .

0

Próbowałem dodać nowe połączenie w VS2015. Żadna z poniższych sugestii nie zadziałała. Podejrzewając jakiś błąd w kreatorze, zwłaszcza że SSMS był w stanie połączyć się dobrze, postanowiłem spróbować go oszukać. Zadziałało!

  1. Zamiast dodawać połączenie, użyj opcji „Utwórz nową bazę danych SQL Server”. Wpisz nazwę swojego serwera i losową nazwę nowej bazy danych, np. „Test”.

  2. Zakładając, że to się powiedzie, otwórz Eksplorator serwera w VS, zlokalizuj połączenie w Połączenia danych, kliknij je prawym przyciskiem myszy i wybierz Modyfikuj połączenie.

  3. Zmień „test” (z kroku 1) na nazwę istniejącej bazy danych, z którą chcesz się połączyć. Kliknij „Testuj połączenie”. Tym razem powinno działać!

  4. Usuń tymczasową bazę danych utworzoną w kroku 1.


0

Myślę, że mam jeszcze jedno rozwiązanie. Niedawno zmieniłem nazwę komputera, więc po wypróbowaniu wszystkich powyższych metod nadal nie mogłem się połączyć. Zmieniłem nazwę serwera. Nazwa serwera => (przeglądaj więcej) => pod silnikiem bazy danych został znaleziony nowy serwer, taki sam jak nowa nazwa komputera. To zadziałało i życie znów jest dobre.


0

Walczyłem z tym przez wieki, zanim zdałem sobie sprawę z mojego błędu - użyłem przecinków zamiast średników w ciągu połączenia


0

Miałem ten problem, ale żadna z powyższych sugestii go nie rozwiązała.

Widziałem ten problem podczas wdrażania mojej witryny sieci Web w usługach IIS. Poprawka polegała na przejściu do ustawień zaawansowanych względem domyślnej puli aplikacji i zmianie właściwości tożsamości z domyślnej na Administrator.


0

Dla mnie był to problem z Firewallem.

Najpierw musisz dodać port (taki jak 1444 i może 1434), ale także

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

i

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

Drugi raz pojawił się ten problem, kiedy wróciłem do zapory, ścieżki były nieprawidłowe i musiałem zaktualizować formularz 12 do 13! Wystarczy kliknąć przycisk Przeglądaj na karcie Programy i usługi, aby to zrealizować.

Na koniec spróbuj uruchomić polecenie

EXEC xp_readerrorlog 0,1, "nie można zarejestrować głównej nazwy usługi", Null

U mnie zwrócił powód błędu


0

Próbowałem prawie wszystkiego na tej stronie, ale miałem kilka podstawowych problemów, które w rzeczywistości wymagały rozwiązania. Nie byłem w stanie zrobić pewnych rzeczy, takich jak otwarcie Menedżera konfiguracji SQL Server, które zakończyło się uszkodzeniem / brakiem plików dostawcy WMI.

Istnieje wiele żmudnych sposobów rozwiązania tego problemu, zgodnie z tym, co przeczytałem, ale narzędzie z tweaking.com było w stanie usunąć i zastąpić / naprawić moje pliki dostawcy WMI (Instrumentacji zarządzania Windows).

Kiedyś naprawiałem komputer i ogólnie narzędzie tweaking.com naprawdę zrobiło na mnie wrażenie i zostało zasugerowane na jednej ze stron forum błędów WMI, na które poszedłem.

Po rozwiązaniu tego problemu udało mi się połączyć z moją bazą danych SQL, zarówno lokalnie, jak i zdalnie.

Mam nadzieję, że to komuś pomoże.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.