27

我正在做一个示例代码,但遇到了一个非常奇怪的行为,我正在尝试使用此连接字符串连接到 SQL Server

"Data Source=" + ServerName + "." + DomainName  + ";Initial Catalog="+DBName+";Integrated Security = false;Persist Security Info=false;User ID=sa;Password=" & Mypassword & ";Connection Timeout=90"

显然我没有使用 Windows 集成身份验证或 (SSPI),当我在 Web 应用程序上使用它时,我收到此错误:

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

请注意,我创建了一个 .Net 应用程序,该应用程序使用相同的连接字符串,并从 IIS 所在的计算机运行,并且工作正常。

以下是我已完成的步骤:

  1. 我检查了打开它的 SQL 客户端配置并启用了协议 tcp 和命名管道。

  2. 我在 IIS 上进行了模拟并使用了 Windows 身份验证,并确保 IIS 使用与我相同的凭据工作。

  3. 我使用 Wireshark 来查看 wut 是两个连接之间的区别,我无法理解输出,但是从 IIS 看来,它总是尝试使用 Windows 身份验证,尽管我已经清楚地制作了字符串,使其不使用 Windows身份验证基本上会发生在连接开始时的一些协商,这两个应用程序“not_defined_in_RFC4178@please_ignore”似乎相同,然后 IIS 总是转到 NTLMSSP,指出我的用户除了通过用户名外无权访问数据库和密码,因此与 IIS 的协商失败,而它通常从应用程序成功。

我的问题是如何解决这个问题,我假设有一些配置要求 IIS 中的任何 SQL 客户端都使用 Windows 身份验证,但我不知道在哪里或如何禁用它

我注意到我没有使用web.configSQL Server 连接字符串的配置,这个问题发生在 IIS7 上。

4

8 回答 8

7

这是我要检查的第一件事:

  1. 验证应用程序池用户有权访问网络资源

    • 由于您声明它在您登录机​​器​​时有效,请尝试将应用程序池用户更改为您登录机器​​的用户。
  2. 检查您是否在 web.config 中启用了模拟。如果这样做,请确保该用户可以访问网络资源。

  3. 尝试更改连接字符串以使用 IP 地址(作为测试)。如果这样可以解决问题,则可能是某种 DNS 问题。

    • 确保在 IP 地址末尾包含 ,1433
    • Network Library=DBMSSOCN在您的连接字符串中设置。(有关详细信息,请参阅 ConnectionStrings.com 上的这篇文章。)
于 2013-05-25T13:24:24.280 回答
4

如果您已按上述方式输入了准确的连接字符串,请检查将连接字符串中的&周围的密码更改为+

上面写的连接字符串根本不是有效的字符串,因为据我所知,字符串可以使用+而不是在 C# 中使用&连接另一个字符串。

于 2013-05-28T11:59:02.297 回答
3

除了其他人指出的内容之外,我唯一一次回忆起专门针对“命名管道”参考的错误消息是基于 SQL-Server 的设置方式。

为了确认,我进入了我的 SQL Server 配置管理器版本。然后,查看“SQL Native Client 11.0 配置”(以防万一,为 32 位和 64 位都做了)并打开显示“客户端协议”。其中显示了共享内存、TCP/IP 和命名管道的选项。确保您的“命名管道”协议已启用。

于 2013-05-28T12:08:33.737 回答
3

首先检查这个:

确保您的 sql server 接受远程连接

Sql Server 实例->属性->连接->允许更多连接。

在第二步执行此步骤:

尝试在 VS 中使用 Server Explorer 窗格建立连接:

1) 打开服务器资源管理器。

2)右键单击“数据连接”并选择“添加连接”

3) 在随后的对话框中,选择您的数据源和数据库,指定安全信息,然后按“测试连接”按钮。

4)当连接正常时,按“确定”

5) 在 Server Explorer 窗格中突出显示您的数据库,然后查看 Properties 窗格。将显示一个连接字符串的工作示例,您可以将其复制并粘贴到您的应用程序或配置文件中。

于 2013-05-30T07:00:38.110 回答
3

您提到 SQL Server 在另一台机器上。您应该确保该计算机上的 SQL Server Browser 服务正在运行。

您将在 Windows 服务管理控制台(以及其他位置)中找到它。

此外,您必须确保防火墙中的 UDP 端口 1434 已打开。

于 2013-05-29T01:00:18.027 回答
2

让我们检查解决此错误的步骤。

1) SQL Server 应该已启动并正在运行。2) 在 SQL Server 配置中启用 TCP/IP 3) 在 Windows 防火墙中打开端口 4) 启用远程连接 5) 启用 SQL Server Browser 服务 6) 在防火墙中创建 sqlbrowser.exe 的异常 7) 重新创建别名

来源在这里

希望能帮助到你

于 2013-05-31T16:05:45.597 回答
2

检查 ServerName、DomainName、DBName 和 MyPassword 的值。他们是对的吗??它们是如何分布的?

于 2013-03-25T11:20:39.977 回答
0

可能是客户端系统无法识别 SQL 服务器

因为由于sql server网络不可用而发生错误,也可能是网络故障的一些错误

于 2013-05-31T12:04:36.500 回答