SqlConnection卡在命名管道上

时间:2013-07-11 22:01:13

标签: c# sql named-pipes sqlconnection

尝试从C#应用程序中打开数据库连接时,我看到以下错误。我意识到这个错误可能已经出现在100个问题之前。但是,在这种情况下,错误仅显示在我的特定台式PC 上运行的 C#apps 上。我通过Google和本网站浏览了互联网,但我找不到解决方案。

错误:

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

为什么这个场景是独一无二的:

我可以从 SQL Server Management Studio(SSMS)连接到SQL服务器。此应用程序可在另一台计算机上运行,并且可以从那里建立与SQL Server的连接。因此,此错误方案特定于在我的特定台式PC上运行的C#应用​​程序。其他应用程序工作(SSMS)。其他PC的工作。

当我使用WireShark“嗅探线路”时,跟踪显示我的应用正在尝试通过NamedPipes(即\ Server \ IPC $)进行连接。我似乎无法强迫它使用TCP / IP。

我做过的事:

  • 重新安装.NET Framework
  • 重新安装Visual Studio(C# - Express版本2010)
  • 在cliconfg.exe中创建了一个别名。

我错过了什么吗?

这是我尝试过的连接字符串......

Data Source=<servername>;Initial Catalog=HIE;Integrated Security=true
Server=tcp:10.240.11.81;Integrated Security=SSPI; database=HIE
Data Source=10.240.11.81,1433;Network Library=DBMSSOCN;Initial Catalog=HIE;User ID=<SqlUserIdThatISetUpAsSysAdmin>;Password=<password>

以下是代码段:

_conn = new SqlConnection();    // _conn declared globally
_conn.ConnectionString = <the connection string above>;
_conn.Open();

3 个答案:

答案 0 :(得分:1)

最可能的情况是Windows防火墙阻止SQL Server通信。来自MSDN(关于命名管道的文章,但仍然相关):

  

Microsoft Windows XP Service Pack 2启用了Windows防火墙   默认情况下关闭端口445。因为Microsoft SQL Server进行通信   通过端口445,如果配置了SQL Server,则必须重新打开端口   使用命名管道侦听传入的客户端连接。对于   有关配置防火墙的信息,请参阅“如何:配置a   SQL Server Access的防火墙“在SQL Server联机丛书中或审查   您的防火墙文档。

另一种情况是本地计算机上的客户端配置未正确配置。在运行提示符下,您可以执行cliconfg(SQL Server客户端配置实用程序)以查看已启用的协议以及用于协议的别名。

答案 1 :(得分:0)

按照usr的评论建议重新定义数据源,或者将SQL Server配置为允许TCP连接(为什么不允许TCP连接?)。

以下是在SQL Server上启用TCP的链接(接受的答案是您要查看的位置):

Enable remote connections for SQL Server Express 2012

答案 2 :(得分:0)

您是从本地磁盘还是网络驱动器运行代码?我遇到了一个非常类似的问题,我的网络驱动器在.Net中不受信任,这就是我的连接失败的原因。