如何修复错误“命名管道提供程序,错误:40 - 无法打开到SQL Server的连接”

时间:2022-09-01 19:47:15

So I'm trying to make a simple C# console app that simply queries a database - nothing more.

所以我试图创建一个简单的C#控制台应用程序,只需查询数据库 - 仅此而已。

However, I keep getting this error:

但是,我一直收到这个错误:

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

System.Data.dll中发生了未处理的“System.Data.SqlClient.SqlException”类型异常

Additional information: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

附加信息:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)

Now, I've tried EVERYTHING! I've edited all my settings(added firewall exception, enabled TCP/IP, just about any solution you can find with a google search, I did). When I try to make a connection using SQL Management Studio using the same credentials that are in my connection string, everything works PERFECTLY. BUt for some reason, nothing works from Visual Studio.

现在,我已经尝试了一切!我已经编辑了所有设置(添加了防火墙例外,启用了TCP / IP,几乎可以通过谷歌搜索找到任何解决方案,我做了)。当我尝试使用SQL Management Studio使用我的连接字符串中的相同凭据建立连接时,一切都完美无缺。 BUt由于某种原因,Visual Studio无效。

Here is my Connection String:

这是我的连接字符串:

<add name="Invoicing"
            connectionString="Data Source=server;Initial Catalog=Invoicing;Persist Security Info=True;ID=id;Password=pw"
            providerName="System.Data.SqlClient" />

Here is app:

这是app:

class Program
{
    public static void Main(string[] args) {

        Invoicing db = new Invoicing("Invoicing");

        var q = from sin Invoice
                where s.Date == 201007 
                select s;

        foreach(var sin q)
            Console.WriteLine("{0}, {1}", s.CreateDate,
                              s.EndDate);


        }
    }

Here is my stack trace:

这是我的堆栈跟踪:

   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user)
   at System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe()
   at System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.GetQueryText(Expression query)
   at System.Data.Linq.DataQuery`1.ToString()

I created the DataContext using SqlMetal, if that matters.

我使用SqlMetal创建了DataContext,如果这很重要的话。

Also, I am using .Net 2008 and SQL 2008.

另外,我使用的是.Net 2008和SQL 2008。

Does anyone have any ideas on what to do?

有没有人对如何做有任何想法?

3 个解决方案

#1


3  

It's probably worth just testing if the following works:

如果以下工作可能值得测试:

SqlConnection con = new SqlConnection("Data Source=server;Initial Catalog=Invoicing;Persist Security Info=True;ID=id;Password=pw");

To me it looks like your connection string is probably not right - there's no user provided. I use the following connection string: "Data Source=ServerNameHere;Initial Catalog=DBNameHere;User ID=XXXX;Password=XXXX"

对我来说,你的连接字符串可能不正确 - 没有用户提供。我使用以下连接字符串:“Data Source = ServerNameHere; Initial Catalog = DBNameHere; User ID = XXXX; Password = XXXX”

#2


3  

You said you enabled TCP/IP, but did you disable Named Pipes? I have run into this before and disabling Named Pipes using Sql Server Configuration Manager resolved it for me.

你说你启用了TCP / IP,但是你禁用了命名管道吗?我之前遇到过这种情况,使用Sql Server配置管理器禁用命名管道为我解决了这个问题。

You can also specify the protocol in the connection string, so you may also want to try that.

您还可以在连接字符串中指定协议,因此您可能还想尝试这样做。

#3


2  

I don't think "ID" is right. I know there are a number of aliases for these things in connection strings, but I always use "User ID"

我不认为“身份证”是对的。我知道连接字符串中有很多这些东西的别名,但我总是使用“用户ID”

Have a look here

看看这里

#1


3  

It's probably worth just testing if the following works:

如果以下工作可能值得测试:

SqlConnection con = new SqlConnection("Data Source=server;Initial Catalog=Invoicing;Persist Security Info=True;ID=id;Password=pw");

To me it looks like your connection string is probably not right - there's no user provided. I use the following connection string: "Data Source=ServerNameHere;Initial Catalog=DBNameHere;User ID=XXXX;Password=XXXX"

对我来说,你的连接字符串可能不正确 - 没有用户提供。我使用以下连接字符串:“Data Source = ServerNameHere; Initial Catalog = DBNameHere; User ID = XXXX; Password = XXXX”

#2


3  

You said you enabled TCP/IP, but did you disable Named Pipes? I have run into this before and disabling Named Pipes using Sql Server Configuration Manager resolved it for me.

你说你启用了TCP / IP,但是你禁用了命名管道吗?我之前遇到过这种情况,使用Sql Server配置管理器禁用命名管道为我解决了这个问题。

You can also specify the protocol in the connection string, so you may also want to try that.

您还可以在连接字符串中指定协议,因此您可能还想尝试这样做。

#3


2  

I don't think "ID" is right. I know there are a number of aliases for these things in connection strings, but I always use "User ID"

我不认为“身份证”是对的。我知道连接字符串中有很多这些东西的别名,但我总是使用“用户ID”

Have a look here

看看这里