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

时间:2010-10-01 16:16:53

标签: c# sql-server visual-studio-2008

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

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

  

未处理的类型异常   'System.Data.SqlClient.SqlException'   发生在System.Data.dll

中      

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

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

这是我的连接字符串:

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

这是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);


        }
    }

这是我的堆栈跟踪:

   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()

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

此外,我正在使用.Net 2008和SQL 2008。

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

3 个答案:

答案 0 :(得分:4)

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

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

对我而言,您的连接字符串可能不正确 - 没有提供用户。 我使用以下连接字符串: “数据源= ServerNameHere;初始目录= DBNameHere;用户ID = XXXX;密码= XXXX”

答案 1 :(得分:4)

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

您也可以在连接字符串中specify the protocol,因此您可能还想尝试一下。

答案 2 :(得分:2)

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

看看here