SqlConnection卡在命名管道上

本文关键字:管道 SqlConnection | 更新日期: 2023-09-27 18:21:58

当我试图从C#应用程序中打开DB连接时,看到以下错误。我意识到这个错误以前可能已经出现在100个问题中了。然而,在这种情况下,错误仅显示在我的特定台式电脑上运行的C#应用程序上。我已经通过谷歌和这个网站搜索了互联网,但我找不到解决方案。

错误:

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

为什么这种情况是独特的:

我可以从SQL server Management Studio(SSMS)连接到SQL server。此应用程序在另一台计算机上运行,并且能够从那里建立到SQL server的连接。因此,这个错误场景是特定于在我的特定桌面电脑上运行的C#应用程序的。其他应用程序可以工作(SSMS)。其他电脑的工作。

当我使用WireShark"嗅探电线"时,跟踪显示我的应用程序正试图通过NamedPipes(即''Server''IPC$)进行连接。我似乎不能强迫它使用TCP/IP。

我尝试过的东西:

  • 重新安装.NET Framework
  • 重新安装Visual Studio(C#学习版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();

SqlConnection卡在命名管道上

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

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

另一种情况是本地计算机上的客户端配置没有正确配置。从运行提示符中,可以执行cliconfg(SQL Server客户端配置实用工具)以查看启用的协议和用于协议的别名。

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

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

为SQL Server Express 2012 启用远程连接

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