Come posso correggere l'errore "Named Pipes Provider, errore 40 - Impossibile aprire una connessione a" SQL Server "?


152

Non riesco a collegarmi al mio database da un sito. Ottengo questo errore:

Provider di tubi denominato, errore: 40 - Impossibile aprire una connessione a SQL Server

Ho provato a utilizzare l'indirizzo IP locale per la connessione e uno pubblico. Ho provato:

  1. Sì, il sito può comunicare con il server
  2. Named pipe / TCP è abilitato.
  3. Sono consentite connessioni remote.
  4. Windows Firewall è disattivato
  5. Creata un'eccezione per la porta 1433 in Windows Firewall.
  6. Abilitato tutto in Gestione configurazione SQL Server.

Cos'altro posso fare qui?


2
Potrebbe essere utile verificare se SQL Server sta effettivamente utilizzando la porta 1433. Potrebbe utilizzare qualcosa di diverso dalla porta predefinita.
Rajeev Shenoy,

Assicurarsi inoltre, durante il ping, che il nome del server sia impostato correttamente (o ben scritto). Questo è stato il problema nel mio caso!
Yann Chabot,

@RajeevShenoy: come si può dire senza una connessione (qual è il problema)? Posso dire alla porta, mentre connesso, usando netstat ma questo funziona solo se c'è una connessione.
MSIS,

Risposte:


117

Risolvere questo problema è molto semplice:

  1. Vai al pannello di controllo.
  2. cercare servizi.
  3. Apri la finestra Servizi locali dai risultati della ricerca
  4. Riavvia il servizio MSSQLSERVER.

Schermata dei passaggi:

Schermata dei passaggi


1
Wow, Management Studio non avrebbe avviato il mio servizio anche se era impostato su Grazie automatica
johnny 5

Grazie, questo mi ha aiutato. Continuerò a dover avviare il servizio da qui ogni volta? Prima non dovevo.
naz786,

3
Cosa succede se questo servizio non è qui? Ho installato SQL Server 17. Non vedo questo servizio ....
Ciaran Gallagher,

1
Effettuando un backup del database da 170 GB, il servizio si è interrotto. Grazie a questo ci sono voluti solo 5 minuti per riavviare il server SQL utilizzato da un client importante. Grazie mille.
Shondeslitch,

2
Tutte le azioni sono state verificate, ma il riavvio non ha funzionato per me. Ottengo sempre lo stesso errore.
JayPex,

89

E la soluzione più semplice: controlla se la barra è tornata ...

Ho trascorso circa un'ora a cercare di capire cosa c'è che non va in SERVER / INSTANCENAME quando tutto è configurato correttamente, named pipe, diritti di accesso dell'utente ... e improvvisamente mi ha colpito, non è una barra, è una barra rovesciata ( \).

L'orrore, la vergogna ...


2
Ho avuto il problema con il PO e ho scoperto che mancavano le informazioni SERVER / INSTANCENAME (al suo posto c'era un punto).
LuxDie

@LuxDie Dove metti SERVER \ INSTANCENAME e dove si trova?
tom_mai78101

Questa è la chiave, non bisogna dimenticare che è necessario connettersi a un "database" ospitato in un'assicurazione su un server. Questo errore viene generato se si utilizza solo il nome host del server per la connessione e si tenta di utilizzare il nome istanza come database o viceversa.
MichaelHuelsen,

Risolto il mio problema Stringa di connessione funzionante: Server=MyServerName\DOLPHIN=Trusted_Connection=True;Database=DolphinPlatformdurante lo sviluppo (C #) mi connettevo a un server MSSQL 2017 installato localmente, ma quando sono andato a distribuirlo, il server remoto installato dal fornitore del software era in esecuzione come Instance. Continuavo a pensare che fosse un problema di autenticazione perché era in esecuzione come servizio o qualcosa del genere finché non l'ho trovato.
Alan,

49

È un processo in tre fasi dopo l'installazione di SQL Server:

  1. Abilita Named Pipes Gestore configurazione SQL -> Configurazione rete SQL Server -> Protocolli -> Named Pipes -> Clic destro -> Riavvia

pipe denominate abilitate

  1. Riavvia il server SQL Config Manager -> SQL Server Services -> SQL Server (SQLEXPRESS) -> Tasto destro del mouse -> Riavvia

  2. Utilizzare i nomi di server e istanza appropriati (entrambi sono necessari!) In genere questo sarebbe . \ SQLEXPRESS , ad esempio vedere lo screenshot dalla finestra di dialogo della connessione QueryExpress.

inserisci qui la descrizione dell'immagine

Ecco qua.


poiché hai una risposta con un punteggio relativamente alto in ritardo. Che cos'è, quando si dispone di un servizio che comunica correttamente con il server sql, quindi dopo 3 ore di funzionamento, inizia a ricevere questo errore che persiste per circa 10 minuti. Quindi, il servizio continua a funzionare come prima dell'errore. ???
TS

Questo è per le connessioni locali? Cosa è inoltre necessario per il funzionamento delle connessioni remote attraverso la rete?
Kissaki

19

Avevo appena installato lo sviluppatore SQL SERVER 2012. Quando stavo creando il mio primo pacchetto SSIS, ho ricevuto questo errore di pipe durante il tentativo di creare un'attività di connessione dati in Strumenti dati di SQL Server 2012 nella casella Gestione connessione. Ho risolto con l'aiuto del post sopra.

Se scegli un'istanza denominata e chiami l'istanza denominata SSQDatabase1 e il nome del tuo PC è PCX1. È necessario immettere PCX1 \ SSQDatabase1 non solo SSQDatabase1 o si riceverà l'errore named pipe.


16

Un thread su MSDN Social, Re: Named Pipes Provider, errore: 40 - Impossibile aprire una connessione a SQL Server , ha un elenco abbastanza decente di possibili problemi correlati al tuo errore. Potresti voler vedere se qualcuno di loro potrebbe essere quello che stai vivendo.

  • Stringa di connessione errata, come l'utilizzo di SqlExpress
  • Named Pipes (NP) non è stato abilitato sull'istanza SQL
  • La connessione remota non è stata abilitata
  • Server non avviato o non puntare a un server reale nella stringa di connessione
  • Altri motivi come un contesto di sicurezza errato
  • prova i test di connettività di base tra le due macchine su cui stai lavorando

Superati, purtroppo, ciò non aiutò. :(
Damien,

4
Va bene, scoprilo. A quanto pare, quando ho installato il server ho fatto un'istanza denominata. Non è possibile connettersi a un'istanza denominata come si farebbe con un'istanza predefinita. Quindi, origine dati: localhost \ nome dell'istanza che funziona. Non riesco ancora a farlo funzionare con un indirizzo IP, ma felice di collegarmi finalmente.
Damien,

Sono contento di sentire, ma per curiosità puoi connetterti ad esso usando ip.ip.ip.ip/NamedInstance?
Khan,

10

Ho appena abilitato TCP / IP, VIA, Named Pipes in Gestione configurazione SQL Server, il mio problema è stato risolto fare riferimento a questo per maggiori informazioni Risoluzione dell'errore Named Pipes 40


collegamento morto. qualche informazione su ciò che ha detto?
Kissaki

7

Usa SERVER \\ NOME ISTANZA. L'uso di una doppia barra rovesciata nel mio progetto ha risolto il mio problema.


Anche questo ha funzionato per me, ma qualcuno può dirmi perché ha funzionato?
GWR,

Direi che la stringa fuoriesce, ma dipende dal contesto
mizuki nakeshu,

Se quella stringa è nel codice C # @"server\instance"o "server\\instance"dovrebbe funzionare. Se si trova in un file di configurazione, allora vuoi solo il server di testo semplice / istanza.
Denise Skidmore,

7

Grazie a Damian ...

Tubi con nome TCP / IP ... entrambi abilitati

Web Config .... (per localhost)

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

5

Aveva lo stesso problema. Trascorse circa 6 ore quando dovevo migrare alcuni server. Ho provato tutti i suggerimenti disponibili su questo argomento e altri.

La soluzione era semplice come il riavvio del server!


1
Purtroppo, il ripristino del server ha risolto il problema anche per me. Tutti gli altri suggerimenti menzionati erano stati tentati inutilmente.
MrShmee,

3

nel mio caso, avevo un server autonomo, ho cambiato la porta predefinita 1433 della porta del server sql in Configuration Manager in un certo numero e ho riavviato il servizio di sql per rendere effettivo, sono stato in grado di connettermi al server sql tramite Management Studio se accedo al server. ma non ero in grado di connettermi dal mio computer locale tramite SQL Server, stavo ottenendo l'errore:

Si è verificato un errore relativo alla rete o specifico dell'istanza durante la creazione di una connessione a SQL Server. Il server non è stato trovato o non era accessibile. Verificare che il nome dell'istanza sia corretto e

che SQL Server è configurato per consentire connessioni remote. (provider: Named Pipes Provider, errore: 40 - Impossibile aprire una connessione a SQL Server) (Microsoft SQL Server, errore: 5)

Ho controllato e verificato tutto quanto sotto

-Named pipe / TCP è abilitato. -Le connessioni remote sono consentite. -Windows Firewall è disattivato -Creata un'eccezione per il portin Windows Firewall (questo non era necessario nel mio caso poiché il server si trova nella stessa sottorete). Abilitato tutto in Gestione configurazione SQL Server.

quindi ho ripristinato il numero di porta sul 1433 predefinito e ho riavviato il servizio SQL Server e il problema è stato risolto e sono in grado di connettere il SQL Server dal mio studio di gestione locale.


3

Ho avuto lo stesso problema. Uso MSSQL Server Management Studio 2017 e ho risolto questo problema usando questi passaggi:

  1. Controllare se i servizi di SQL Server Services funzionano correttamente.
  2. Controlla anche se funziona in buone condizioni SQL Server (MSSQLSERVER).
  3. Verificare anche il corretto funzionamento di SQL Server Browser.
  4. Riavvia SQL Server (MSSQLSERVER)

e riparato.


3
Grazie per questo! Il browser SQL Server è stato disabilitato, quindi è stato risolto per me!
Sam

2

Prova i seguenti passaggi:

  1. Aprire la finestra Servizi (aprire "Esegui casella" e digitare services.msc).

  2. Alla ricerca di servizi SQL (con prefisso SQL).

  3. Avviarli (se non è possibile avviarlo. Andare al passaggio 4).

  4. Fai clic con il pulsante destro del mouse su ciascun servizio -> Proprietà -> Passa alla scheda "Accesso" -> scegli l'accesso come "Locale ..." -> 0 KB. Quindi riavviare i servizi SQL.

Prova Apri SQL e collega il database.


2

Molto probabilmente il tuo nome DB non è corretto, vedrai il nome del server in VS come "DESKTOP-0I14BKI" ma se apri SSMS vedrai DESKTOP-0I14BKI \ SQLBLAHBLAH , aggiungi semplicemente " \ SQLBLAHBLAH " (nome istanza ) al tuo "nome server" nelle proprietà della connessione VS.

Vedrai : inserisci qui la descrizione dell'immagine

Aggiustare: inserisci qui la descrizione dell'immagine


2

TL; DR; L'istanza di SQL Server utilizza porte dinamiche che non funzionano. Impone a SQL Server di utilizzare la porta statica # 1433.

Dettagli completi : prima di tutto questo problema è più probabile se hai un mix di istanza predefinita e denominata o solo istanze denominate (che era il mio caso).

Concetto chiave : ogni istanza di Microsoft SQL Server installata su un computer utilizza una porta diversa per ascoltare le richieste di connessione in arrivo. L'istanza predefinita di SQL Server utilizza la porta n. 1433. Man mano che si installano le istanze denominate, queste inizieranno a utilizzare porte dinamiche decise al momento dell'avvio del servizio Windows corrispondente all'istanza denominata di SQL Server.

Il mio codice non riusciva (con il codice di errore 40) a connettersi all'unica istanza denominata di SQL Server che avevo sulla mia macchina virtuale. Di seguito puoi provare le possibili soluzioni:

Soluzione n. 1 : il codice client che tenta di connettersi all'istanza di SQL Server richiede assistenza dal servizio browser SQL Server per capire il numero di porta su cui l'istanza denominata è in ascolto per le connessioni in entrata. Assicurarsi che il servizio browser SQL sia in esecuzione sul computer.

Soluzione n. 2 : controllare il numero di porta (in colore giallo) utilizzato dall'istanza di SQL Server dal gestore della configurazione di SQL Server come mostrato nell'istantanea di seguito:

inserisci qui la descrizione dell'immagine

Utilizzare quel numero di porta esplicitamente nella stringa di connessione o con sqlcmdmostrato di seguito:

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

Soluzione n. 3 : imponi all'istanza denominata di utilizzare la porta n. 1433 utilizzata dall'istanza predefinita. Ricorda che funzionerà solo se non hai alcuna istanza predefinita di SQL Server sul tuo computer poiché l'istanza predefinita di SQL Server utilizzerà già la porta # 1433. Lo stesso numero di porta non può essere utilizzato da due diversi servizi Windows.

Contrassegna il TCP Dynamic portscampo in bianco e il TCP Portcampo in 1433.

inserisci qui la descrizione dell'immagine

Modificare il numero di porta nella stringa di connessione come mostrato di seguito:

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

O

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

Nota : ogni modifica delle impostazioni TCP / IP richiede il riavvio del servizio Windows corrispondente.

Abbastanza interessante dopo aver risolto l'errore quando sono tornato alle impostazioni della porta dinamica per riprodurre lo stesso errore, allora non è successo. Non so perché.

Leggi di seguito interessanti discussioni per saperne di più sulle porte dinamiche di SQL Server:

Come configurare la porta di SQL Server su più istanze?

Quando una porta dinamica è "dinamica"?

Quando utilizzare una porta dinamica TCP e quando porta TCP?

Questo blog mi ha portato a risolvere il mio problema .


1

Nel mio caso, ho aperto SQL Server Management Studio e ho cercato SQLEXPRESS nel mio motore di database. Aveva due istanze e ho selezionato quello corretto.

inserisci qui la descrizione dell'immagine


1

Se stai lavorando con Asp.net core e stai usando appsettings.json di scrivi server come localhost e dopo scrivi il nome dell'istanza sql per la pipe denominata abilitata come questa

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

1

Soluzione molto semplice

usa (local)\InstanceName il gioco è fatto. ha funzionato per me.


1

Se hai provato a riavviare il servizio MSSQLSERVER e non ha funzionato, questa potrebbe essere una soluzione:

Se si utilizza SQLExpress, il nome del server deve essere il seguente ComputerName \ SQLExpress. Tuttavia, per SQLDeveloper, non è necessario correggere SQLDeveloper dopo ComputerName.


0

Dopo aver seguito tutti i passaggi indicati qui , se ancora non si connette, provare ad aggiungere il DNS con l'indirizzo IP nel file hosts nella cartella etc. L'aggiunta di un indirizzo IP invece del nome DNS nella stringa di connessione dovrebbe essere una soluzione temporanea per verificare se la connessione funziona davvero.


0

Ho provato a utilizzare l'indirizzo IP locale per la connessione e uno pubblico. Ho provato:

Sì, il sito può comunicare con il server Named pipe / TCP è abilitato. Sono consentite connessioni remote. Windows Firewall è disattivato Creata un'eccezione per la porta 1433 in Windows Firewall. Abilitato tutto in Gestione configurazione SQL Server.

ho assicurato e fatto anche quanto sopra e voglio solo condividere il DOPPIO BACKSLASH

oBuilder.DataSource = "SPECIFICPCNAME \ SQLEXPRESS";

L'uso di un SINGOLO BACKSLASH ha provocato un errore di generazione, ovvero: Errore 1 Sequenza di escape non riconosciuta

Spero che questo aiuti il ​​prossimo ragazzo - ho sacrificato la cena, lo spuntino di mezzanotte e il momento saliente della NBA per risolvere questo problema (peccato)

Grazie a [Tamizh venthan] ^ _ ^


0

Abilitare TCP / Ip, Piped Protocol andando su Gestione computer -> SQL e servizi, assicurarsi che il servizio sia attivo. Enbale la porta sul Firewall. Prova ad accedere tramite il prompt dei comandi -> come amministratore; l'ultimo nome utente dovrebbe essere (locale) \ SQLEXPRESS. Spero che questo ti aiuti.


0

Apri Gestione configurazione SQL Server

  1. Selezionare SQL Server Services da destra.
  2. Trova il tuo server da destra e vai alle sue proprietà (con il tasto destro)
  3. Modifica il metodo di accesso in Sistema locale.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


0

Ho avuto lo stesso problema e risolto il problema disabilitando il mio firewall (ESET).

Il primo passo per risolvere questo problema dovrebbe essere provare a eseguire il ping del proprio computer da un altro computer. Se hai attivato il firewall, potresti non essere in grado di eseguire il ping. Ho provato a eseguire il ping del mio PC, quindi il ping non è riuscito (non ho ricevuto risposta dal server)


0

Di seguito sono stati suggeriti i passaggi per risolvere il problema. Come posso correggere l'errore "Provider di nomi nominati, errore 40 - Impossibile aprire una connessione a" SQL Server "

  1. Controllare se i servizi di SQL Server Services funzionano correttamente .
  2. Controlla anche se funziona in buone condizioni SQL Server (MSSQLSERVER) .
  3. Verificare anche il corretto funzionamento di SQL Server Browser .
  4. Elimina tutti gli alias precedenti , ora crea nuovi alias secondo i tuoi requisiti.
  5. Ora controlla il funzionamento della porta predefinita 1433 di SQL Server
  6. Quindi fai clic su Protocolli client nell'istanza, quindi fai clic su TCP / IP , ora fai clic con il pulsante destro del mouse, apri la Proprietà, qui puoi assicurarti che funzioni correttamente la porta predefinita SQL 1433 .
  7. Apri SQL Server Management Studio , quindi fai clic con il pulsante destro del mouse, fai clic sull'opzione " Proprietà ", quindi fai clic sulla scheda Connessioni , quindi seleziona Abilita connessioni remote a questo server .
  8. Verifica il corretto funzionamento o l' host IP ping .

0

Stavo cercando di aggiungere una nuova connessione in VS2015. Nessuno dei suggerimenti qui ha funzionato. Sospettando una sorta di bug nella procedura guidata, soprattutto perché SSMS è stato in grado di connettersi bene, ho deciso di provare a ingannarlo. Ha funzionato!

  1. Invece di aggiungere la connessione, utilizzare "Crea nuovo database SQL Server". Immettere il nome del server e un nome casuale per il nuovo DB, ad esempio "test".

  2. Supponendo che ciò abbia esito positivo, aprire Esplora server in VS, individuare la connessione in Connessioni dati, fare clic con il tasto destro del mouse e selezionare Modifica connessione.

  3. Cambia "test" (dal passaggio 1) nel nome del database esistente a cui vuoi connetterti. Fai clic su "Verifica connessione". Questa volta dovrebbe funzionare!

  4. Elimina il database temporaneo creato nel passaggio 1.


0

Ho un'altra soluzione, credo. Di recente avevo cambiato il nome del mio computer così, dopo che non riuscivo a collegarmi ancora dopo aver provato tutti i metodi sopra. Ho cambiato il nome del server. Nome server => (cerca altro) => sotto il motore di database, è stato trovato un nuovo server uguale al nuovo nome del computer. Funzionava e la vita è di nuovo buona.


0

Ho lottato per anni su questo prima di rendermi conto del mio errore - avevo usato virgole invece di punti e virgola nella stringa di connessione


0

Ho avuto questo problema ma nessuno dei suggerimenti sopra risolti.

Stavo riscontrando questo problema quando ho distribuito il mio sito Web su IIS. La correzione consisteva nel passare alle impostazioni avanzate rispetto al pool di app predefinito e modificare la proprietà dell'identità dal predefinito in Amministratore.


0

Per me è stato un problema di firewall.

Per prima cosa devi aggiungere la porta (come 1444 e forse 1434) ma anche

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

e

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

La seconda volta che ho riscontrato questo problema è quando sono tornato al firewall, i percorsi non erano corretti e dovevo aggiornare i moduli da 12 a 13! Basta fare clic su Sfoglia nella scheda Programmi e servizi per aiutarlo a realizzarlo.

Infine, prova a eseguire il comando

EXEC xp_readerrorlog 0,1, "impossibile registrare il nome principale del servizio", null

Per me, ha restituito il motivo dell'errore


0

Ho provato praticamente tutto su questa pagina, ma avevo alcuni problemi di fondo che erano in realtà ciò che doveva essere risolto. Non sono riuscito a fare determinate cose come aprire Gestione configurazione SQL Server, che ha finito per essere file del provider WMI corrotto / mancante.

Esistono molti modi noiosi per risolvere questi problemi in base a ciò che ho letto, ma lo strumento di tweaking.com è stato in grado di rimuovere e sostituire / riparare i file del mio provider WMI (Strumentazione gestione Windows).

Ero solito fare la riparazione del computer e nel complesso lo strumento tweaking.com mi ha davvero impressionato, ed è stato suggerito da una delle pagine del forum di errore WMI a cui sono andato.

Dopo aver risolto questo problema sono stato in grado di connettermi al mio db SQL, sia localmente che da remoto.

Spero che questo aiuti qualcuno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.