SqlConnection错误命名管道提供程序

时间:2010-07-09 02:46:30

标签: named-pipes sqlconnection sqlexception

一点背景:

我有一个Windows .NET应用程序,该应用程序已被北美约40名现场员工使用。该程序允许用户在现场(远程访问互联网)输入数据,然后在晚上同步到我们的Sql Server 2005数据库。几天前,我的两个用户报告在执行尝试连接到我们的服务器数据库(使用.NET的SqlConnection类)的操作时收到以下错误。

  

System.Data.SqlClient.SqlException:A   与网络相关或特定于实例的   建立一个错误时发生错误   连接到SQL Server。服务器   没找到或无法访问。   验证实例名称是否为   正确和SQL Server是   配置为允许远程   连接。 (提供者:命名管道   提供者,错误:40 - 无法打开   连接到SQL Server)

我们的现场员工通常使用酒店的Wi-Fi连接,起初我认为他们在同一天巧合地遇到了“不合作”的网络。第二天,搬到不同的酒店后,其中一个用户的问题就消失了,但另一个用户继续问题。

除了提供错误消息之外,此背景的目的是指出

  • 这是使用此软件一年多来发生此问题,
  • 我们的大多数用户使用相同的软件连接到我们的服务器数据库时没有任何问题。

这让我毫不犹豫地认为问题发生在服务器上(我在这个错误上阅读的大多数论坛和博客都提供了确保正确配置SQL Server的步骤。)

注意到错误消息的命名管道提供程序部分,我猜测该用户的计算机或网络可能导致它尝试通过管道而不是TCP进行连接,所以我尝试将服务器配置为允许远程连接使用TCP / IP和命名管道,以前只能将其设置为TCP / IP。更改此设置后,此用户的错误仍在继续。

所以现在我要集思广益,关于这个用户的计算机/软件/互联网连接可能会有什么特别之处,这会妨碍它连接到我们的SQL Server。

我们的连接字符串确实使用了我们服务器的URL(而不是IP地址),我想知道他的笔记本电脑是否在通过该地址找到它时遇到问题。但是,他能够访问由相同URL托管的网站,所以我猜问题就在其他地方。

任何想法都将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:3)

您可能很久以后就解决了这个问题或者继续使用,但对于那些在连接到SQL服务器实例时遇到与Error 40 / named管道问题类似问题的人来说,以下简单的解决方案对我们有用:

您可以通过在连接字符串中添加前缀来强制您的客户端程序使用TCP(或命名管道或其他可用方法)。

对于.NET SQLConnection示例,请在SQLConnection的连接字符串中指定,如下所示:

Server=tcp:192.168.0.1;Integrated Security=SSPI; database=sampledb

See this blog entry了解更多信息。

答案 1 :(得分:1)

它们是否可能被酒店的防火墙阻挡,这可能只允许某些端口上的流量?