代码之家  ›  专栏  ›  技术社区  ›  James

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

  •  6
  • James  · 技术社区  · 14 年前

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

    'System.Data.SqlClient客户端.SqlException' 发生在系统数据.dll

    附加信息:A 连接到SQL Server。服务器 找不到或无法访问。 验证实例名称是否正确 正确,并且SQL Server 配置为允许远程 连接。(提供者:命名管道) 连接到SQL Server)

    现在,我什么都试过了!我已经编辑了我所有的设置(添加了防火墙例外,启用了TCP/IP,几乎任何你可以通过谷歌搜索找到的解决方案,我都做了)。当我尝试使用sqlmanagementstudio使用连接字符串中的相同凭据建立连接时,一切都很正常。但是由于某些原因,visualstudio中没有任何东西可以工作。

    这是我的连接字符串:

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

    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,如果有必要的话。

    有人知道该怎么办吗?

    3 回复  |  直到 13 年前
        1
  •  4
  •   Matt Fellows    14 年前

    如果以下各项有效,可能值得测试:

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

    “数据源=ServerNameHere;初始目录=DBNameHere;用户ID=XXXX;密码=XXXX”

        2
  •  4
  •   Jeff Ogata    14 年前

    你说你启用了TCP/IP,但是你禁用了命名管道吗?我以前遇到过这个问题,使用SQLServer配置管理器禁用命名管道解决了这个问题。

    specify the protocol

        3
  •  2
  •   Cade Roux    14 年前

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

    看一看 here