建立与服务器的连接时发生错误。当连接到SQL Server 2005时,出现此故障的原因可能是SQL Server在默认设置下不允许远程连接。(提供者:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)

您好,我是 SQL Server 2005 开发新手。我使用 SQL Server 2000 已经有好几年了,但是在执行了连接到服务器的常规操作后,我在 Web 服务器上遇到了这个异常。

谷歌上有几个链接向我指出了可能的解决方案,但没有一个链接能解决我的问题。我已经对“表面积无论如何...”对话框进行了更改(这到底是什么???为什么SQL Server发生了如此大的变化???现在看来很复杂)。

我已确保 SQL Server 2005 已正确配置以允许数据库服务器实例上的传入连接。我也选了 自动的 作为启动类型,每次系统启动时自动启动 SQL Server Browser 服务。不,没有运行防火墙。

我尝试更改连接字符串以使用端口进行连接、使用 IP 进行连接、使用实例名称进行连接...

似乎什么都不起作用,我仍然遇到同样的错误。有什么提示吗?

回答人们提出的问题:是的,我可以使用 Management Studio 从另一台计算机进行连接。是的,我确信它已配置为接受本地和远程 TCP/IP 以及命名管道。是的,我重新启动了服务器。

我正在使用混合模式安全性,我已经启用了该模式。我已经启用了 sa 用户。我可以使用 .udl 文件连接到数据库,并且我已检查连接字符串是否正常。我可以使用 DBArtisan 和 SQL Server 客户端工具连接到数据库。我可以在服务器和不同的机器上执行此操作。即使有这一切...

该网站仍然无法连接。

新更新...我被这个问题困扰了一整天,还是没有找到原因。看来我发布的错误消息是 .net 在无法连接时给出的一般错误。我在连接字符串上放置了垃圾(键入不存在的服务器),但仍然遇到相同的错误。

这些是我在服务器上使用的一些连接字符串:

connectionString="集成安全性=SSPI;数据源=服务器;初始目录=db;网络库=DBMSSOCN;”

连接字符串=“数据源=服务器;初始目录=db;用户ID=sa;密码=xxxxx;”

连接字符串=“数据源=SERVER\MSSQLSERVER;初始目录=db;用户ID=sa;密码=xxxxx;”

我尝试使用一些奇怪的命令注册 sql server 实例,我发现这里:http://kb.discountasp.net/article.aspx?id=1041为此,我使用了 aspnet_regsql.exe 工具。它仍然不起作用...

我还知道服务器上安装了最新版本的 MDAC。我唯一怀疑的是服务器有两个数据库引擎:服务器和服务器\sqlexpress

这和问题有关系吗?

有帮助吗?

解决方案 9

我解决了连接问题。问题出在我的应用程序上。问题的原因是开发(而不是生产)数据库的连接字符串被生成数据集的对话框之一硬编码。该对话框将连接字符串放置在 web.config 和名为“Settings.settings.cs”的隐藏源代码文件上。通过将连接字符串固定到正确的位置解决了该问题。

该错误消息完全具有误导性,但我能够通过遵循堆栈跟踪上显示的所有方法找到该错误消息。

因此,如果您发现此错误消息,可能的原因有很多。您的第一个选择是遵循此错误的常规步骤,即检查服务器是否允许远程和本地连接,并重新启动浏览器服务。

如果这不起作用,请检查堆栈跟踪,查找应用程序中的代码,在其中放置一个断点并探索连接字符串上的所有属性。至少我就是这样解决的。

其他提示

我唯一怀疑的是服务器有两个数据库引擎:服务器和服务器\sqlexpress

我认为这就是问题的根源。您打算连接到哪一个?您需要指定要连接的“实例”。

假设您打算连接到 SERVER 实例,那么连接字符串应如下所示(假设默认实例名称):

数据来源=您的服务器\MSSQLSERVER;初始目录=db;用户ID=sa;密码=xxxxx;

或者对于 sql express,连接字符串如下所示:数据来源=您的服务器\sqlexpress;初始目录=db;用户ID=sa;密码=xxxxx;

您可以通过 Management Studio 从另一台计算机连接到 SQL Server 吗?这可能会帮助您缩小是 SQL Server 配置还是连接字符串配置的范围。

重新检查表面区域配置,并确保允许 TCP/IP 连接。

这可能有很多事情。我要检查的第一件事是确保您可以使用 SQL Server Management Studio 连接到服务器。其次,检查您的连接字符串以确保其正确。表面区域配置不应应用于本地连接。

尝试在服务器上重新安装最新的 MDAC。我曾经遇到过类似的问题,这解决了它。

[http://www.microsoft.com/downloads/details.aspx?familyid=6c050fe3-c795-4b7d-b037-185d0506396c&displaylang=en][1]

根据错误,代码似乎正在尝试使用命名管道而不是 TCPIP 进行连接。您实际上可能需要在连接字符串中明确指出 sql 提供程序应使用 tcpip 进行连接,因此您的连接字符串将如下所示。

使用集成身份验证(Windows):

集成安全=SSPI;数据来源=服务器名称;初始目录=数据库名称; 网络库=DBMSSOCN;

使用 SQL 身份验证:

用户识别号=用户名;密码=密码;数据来源=服务器名称;初始目录=数据库名称; 网络库=DBMSSOCN;

我以前见过类似的情况发生,出于某种原因,默认情况下使用“命名管道”作为传输/连接层,特别是因为 Web 应用程序和 sql 服务器都在同一台计算机上运行。我通常总是使用 tcpip 作为传输或网络库。

另一种故障排除技术是使用 UDL(或数据链接文件)来排除连接故障。这允许您在连接提供程序(ODBC、OLEDB 等)之间切换并设置其他连接选项。

  1. 在机器桌面上右键,选择新建->文本文档。
  2. 将 *.txt 文件重命名为 TestConnect.udl(名称并不重要,只需使用 .udl 扩展名即可)。您应该看到图标从文本文件图标更改为在数据网格顶部显示计算机的图标,或类似的东西(换句话说,Windows 应该有一个图标。)。
  3. 现在双击该文件,您将看到一个“数据链接属性”小程序出现。
  4. 单击“提供商”选项卡,您将看到不同连接提供商的列表。我首先选择“Microsoft OLE DB Provider for SQL Server”。我们可以用它来确认 OLE DB 是否可以连接。
  5. 单击下一步,然后输入服务器名称或 IP 地址。选择Windows NT 集成安全性。(您可以随时返回并将其更改为使用 sql 登录。)此时您可以单击“测试连接”。如果连接成功,则从下拉列表中选择数据库名称。
  6. 最后,如果连接失败,请选择“全部”选项卡,然后查找“网络库”并编辑其值,将其设置为“DBMSSOCN”。
  7. 返回连接选项卡并再次单击“测试连接”。
  8. 这次重复步骤 4 和 5,并选择“SQL Native Client”。

希望这可以帮助。

在提示符下执行:

osql -E -S

...给你一个 > 提示吗?

您是否尝试在连接字符串中指定实例名称?显然,sql server express 对实例名称特别挑剔。

我还开始研究 SQL Server 配置管理器。那么您是否单击进入“SQL Server 2005 网络配置”,然后查看“Protocols for 实例名称“?您启用了 TCP/IP 和命名管道吗?

您是否还查看了“SQL Native Client Configuration”-->“Client Protocols”,并且您看到那里也启用了 TCP/IP 和命名管道?

使用 SQL Server 2005 Surface Area Configuration 工具,单击“服务和连接的 Surface Area Configuration”,然后在“Database Engine”-->“Remote Connections”下选择什么?由于您似乎正在尝试使用命名管道进行连接,因此您需要确保选择“本地和远程连接”和“使用 tcp/ip 和命名管道”。

您可能知道,一旦进行任何更改,您必须通过 Management Studio 停止并重新启动 sql server 实例(您不需要重新启动整个计算机,尽管重新启动整个计算机即可到达那里)。

还有我的最后一条建议。暂时离开这件事,让你的思绪离开它几分钟。当你重新投入时,你可能会发现一些你之前错过或忽视的东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top