7

尝试从我的 C# 应用程序中打开数据库连接时,我看到以下错误。我意识到这个错误之前可能已经出现在 100 个问题上。但是,在这种情况下,错误只会出现在我的特定桌面 PC上运行的C# 应用程序上。我已经通过谷歌和这个网站搜索了互联网,但我找不到解决方案。

错误:

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

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

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

当我使用 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();
4

3 回答 3

2

最可能的情况是 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 客户端配置实用程序)来查看启用的协议和用于协议的别名。

于 2013-07-11T22:36:50.687 回答
0

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

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

为 SQL Server Express 2012 启用远程连接

于 2013-07-11T22:07:50.373 回答
0

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

于 2017-02-14T19:47:06.073 回答