尝试从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。
我做过的事:
我错过了什么吗?
这是我尝试过的连接字符串......
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();
答案 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的链接(接受的答案是您要查看的位置):
答案 2 :(得分:0)
您是从本地磁盘还是网络驱动器运行代码?我遇到了一个非常类似的问题,我的网络驱动器在.Net中不受信任,这就是我的连接失败的原因。