Named Pipes Provider, error: 40 - Could not open a connection to SQL Server

Named Pipes Provider, error: 40 - Could not open a connection to SQL Server

Rate This
  • Comments 37

This error was most frequently hitted by our customers, and in this post, give a brief summary of troubleshooting tips for this specific error message.

First, take a look at below MSDN forum link lists about this topic:


The various causes fall into five categories:

1 Incorrect connection string, such as using SqlExpress.

2 NP was not enabled on the SQL instance.

3 Remote connection was not enabled.

4 Server not started, or point to not a real server in your connection string.

5 Other reasons such as incorrect security context.

Let's go throught the detail one by one:

I.   Incorrect connection string, such as using SqlExpress.

Check out:


The typical error when dealing with Express includes:

a.  User is not aware of SqlExpress was installed as a named instance, consequently, in his/her connection string, he/she only specify ".","localhost" etc instead of ".\SqlExpress" or "<machinename>\Sqlexpress".

b. Np was disabld by default after installing SqlExpress.

c. If Sqlexpress was installed on the remote box, you need to enable remote connection for Express.

Please read the following blog for best practice of connecting to SqlExpress.


II. NP was not enabled on the SQL instance.

Check out:

Oppose to SQL 2000 which turn on all protocols, SQL 2005 SKUs turn off NP by default. So, when you see this error, please check:

1) Go to SQL Server Configuration Manager, See Server has NP enabled.

2) %windir%\program files\microsoft sql server\mssql.1\mssql\log, notepad ERRORLOG, see whether Server is listening on NP.  You should see "Server named pipe provider is ready to accept connection on [ \\.\pipe\sql\query ] or [\\.\pipe\mssql$<InstanceName>\sql\query]"

3) Notice that "sql\query" is the default pipe name, so you need to know server is listening on which pipe name. eg: if you specify server pipe name is "sql\query1", then you would see in the errorlog that server listening on [ \\.\pipe\sql\query1 ], and go to SQL Server Configuration Manager, click client Named Pipe properties, see whether the pipe name is same with the one server listening on.

4) If you are using SQL Native Client ODBC/OLEDB provider({SQL Native Client} or SQLNCLI), go to SQL Configuration Manager, click client protocols, make sure NP and TCP are both enabled. Right click properties of NP, make sure client is using the same pipe name as server for connection.

5) If you are using MDAC ODBC/OLEDB({SQL Server} or SQLOLEDB) provider, in command line, launch "cliconfg.exe" and make sure NP enabled and right pipe name specified.


III. Remote connection was not enabled. 

Check out:


If you are making a remote connection, namely, your target SQL Server is on the different box as client application, you might need to check whether:

a. "File and Printer Sharing" was opened in Firewall exception list.

b. Please see the blog for enabling remote connection for express and troubleshooting tips of remote connection.


IV. Server not started, or point to not a real server in your connection string.

Check out:

a. use "sc query mssqlserver" for default instance or "sc query mssql$<instancename>" to make sure SQL Server was started. Sometimes, reseason behind the broken of your client application w/ this error:40 might be SQL server restarted and failed, so, it'd better for you to double check.

b. User specified wrong server in their connection string, as described in the forum discussion, "MSSQLSERVER" is an invalid instance name. Remember, when you connect to default instance, <machinename> could be best representitive for the instance, when you connect to a named instance such as sqlexpress, you should specify <machinename>\<instancename> as data source in your connection string.


 V. Other reasons such as incorrect security context.

Check out:

Such error also occured during user operation such as moving database or db mirroring or cluster, any DB OP that might invovle different sql instances, namely, the destination database is located in another sql instance and user is not aware of the state of the destination. I recommend you first isolate whether this fail is during connection stage or data operation stage.

a. During data operation, you are normally asked to type in the destination server name whether it is default to "(local)" or another server "<remotemachinename>". So, remember the exact string that represent the target instance, then when the error repros, open command line, use "sqlcmd -S<representitive> -E" ,see what happens, if the connection fail, please follow up above I - IV troubleshooting lists. otherwise continue.

b. If you can make basic conection, but still face the error, then there must be something that server reject the connection or client close the connection for some reason.


Summary, give checklist:

1. Is your target server started?

2. Is your target server listening on NP? Which Pipe?

3. Has your client enabled NP? Use the same pipe to connect as Server?

4. Are you making local connection? If so, what is the instance, default or remote?  

5. Did you put correct instance name in the connection string? Remember, Sqlexpress is a named instance.

6. Did you enable remote connection? Firewall? IPSec? "File and Printer Sharing" opened? Can access server?

7. Can you make basic connection by using <servername> or <servername>\<instancename>? Use sqlcmd or osql.

8. What is your repro step? What was your client APP doing during this error occuring? Which DB operation, detail?



SQL Server Protocols
Disclaimer: This posting is provided "AS IS" with no warranties, and confers no rights
Leave a Comment
  • Please add 5 and 6 and type the answer here:
  • Post
  • In my case I could solve it by using the IP address rather than the machine name in the connection string.


  • Yo tengo una aplicacion hecha en VB 2005, mi aplicacion la monte en un server 2008 con sql 2005, mi aplicacion hace una busqueda en una base de datos y  muestra un GridView mismo que puede paginar la informacion. Puedo ingresar a mi aplicacion (algunos componentes cargan datos de la base de datos), logro hacer la busqueda y el grid view la pagina, el problema es que cuando quiero ver lasiguiente pagina u otra que no sea la primera me manda el error.

    "Error mientras se establecía la conexión con el servidor. Al conectar con SQL Server 2005, el error se puede producir porque la configuración predeterminada de SQL Server no admite conexiones remotas. (provider: Proveedor de canalizaciones con nombre, error: 40 - No se pudo abrir una conexión con SQL Server) "

    La opcion de conexiones remotas esta marcada y mi FireWall esta configurado para que permita la conexion, si no fuera asi no me deberia permitir ingresar a mi aplicacion pues mi aplicacion al cargarse utiliza la base de datos.

    espero me puedan ayudar muchas gracias.

  • Thanks for the troubleshooting steps...  In my case, I wouldn't have thought the firewall would have been the issue....

  • hi all,

    Well i encountered the same problem, but it was related to SQL Server Agent that wasn't enabled. I got this error while testing some stuff inside SQL Server 2008. I totaly forgot the Agent and didn't pay any attention.

    Regardz and good luck

  • Dear All

    Unable to insert data from a Form in Visual studio. getting this error

    re: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server

    i just installed only SQL server 2005 and Visual Basic Express Edition 2008. i m using a database inside VB 2008 .anyone help me regarding this issue

  • We've had an issue with Vista X64 where the alias was configured to point to '(local)' using tcp. After much head scratching, we've changed it to point to '' (32 bit and 64 client configuration) and now the client is connecting fine.

  • the best help on the web. I was about to quit when I ran to this post and viola! My connection string to sqlexpress 2008 had the "source" value just as "." Changing it to ".\sqlexpress" did the trick. Now I can connect to the db. It was the very first thing I suspected but didn't quite named the instance this way. I tried mssqlexpress, mssqlserver, blah, blah.

    Thanks or this valuable help.

  • Oooooh....

    i have added 1433 as ..Data Source=mysqlserver\instance1,1433;...

    And it just worked!!! That was so exciting....

    thank you very much all!

  • Thanks for this helpful post, found it via Google.

    Turns out my problem was the service was not installed for some reason. Running

    sc query mssqlserver

    tells me the service does not exist.

    I'm now trying a repair-install of SQL in hopes the service will get properly installed.

    Thanks again!

  • Today I have no possibilities to connect to my SQL Server on my laptop. I

    have connected to my SQL Server for months and today I got an error:

    Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

    (Microsoft SQL Server, Error: 2)

    MY id name is

  • Guys, I have a SQL 200 Server it works fine for most apps.  However, I have a .NET 2.0 based application, and it is giving me this error mentioned here.  I do not even have any other version of SQL and I am using the default instance.  Why does .NET 2.0 realize I have a sql 2000, nothing else.. Please help.

  • Thank you  it was a connection string problem ur are right :>

  • Well I was blind and now I see the light.  

  • Named Pipes Provider, error: 40 – Could not open a connection to SQL Server

    watch this video link

  • Named Pipes Provider, error: 40 – Could not open a connection to SQL Server

    watch this video link

    if u like thumb up

Page 2 of 3 (37 items) 123