可以从一个客户端访问远程连接的SQL数据库,但不能从另一个客户端进行访问

本文关键字:客户端 访问 数据库 SQL 但不能 另一个 远程连接 一个 | 更新日期: 2023-09-27 18:26:46

我已经构建了一个winforms应用程序,该应用程序安装在客户端计算机上,该客户端计算机上的SQL Server数据库托管在客户端通过远程连接访问的服务器上。

该应用程序按计划在服务器和一个客户端上运行,但当我试图从第二个客户端访问相同的数据时,我会出现"登录前握手"错误。

在研究过程中,我发现了许多解决方案,有些说我需要启用IPV4和IPV6,我做到了,另一些说我需要启动远程连接,这不是问题,因为其他客户端已经访问了它

有人能告诉我问题出在哪里吗?

工作的客户端运行:64位处理器,Windows 8操作系统。不运行的客户端:32位处理器,Windows Vista。

Clents还通过本地网络上的ClickOnce访问该应用程序。应用程序目标操作系统当前设置为x64。当我到达办公室时,我会切换到任何CPU和x86,并报告是否有任何变化。

可以从一个客户端访问远程连接的SQL数据库,但不能从另一个客户端进行访问

检查网络

你的x64盒子可以看到服务器,但你的32位盒子看不到,这很奇怪。两个盒子是连接到同一个交换机,还是通过不同的网络路径到达服务器?正如Eric所说,可能有防火墙阻塞了32位机器和SQL框之间的SQL Server端口。

此外,从出现故障的机器中,检查它认为SQL Box所在的网络地址:

C:'> nslookup TestSQLServer
Server:  dns1.internal.foo.com
Address:  10.1.10.2
Non-authoritative answer:
Name:    TestSQLServer
Address:  10.1.10.141

如果DNS为SQL框返回IPv6地址,请确保故障客户端已安装并启用IPv6。

检查SQL Server

如本线程中所讨论的,请尝试将SQL Server设置为侦听特定的网络接口,并尝试连接到该接口的IP地址。注意:如果这个IP地址是通过DHCP动态分配的,不要硬编码你的客户端代码来与它对话。

还要检查服务器正在侦听哪个端口——如果它从默认端口更改,则必须在客户端的连接字符串/代码中指定端口号。

检查与SQL Server的连接

我建议彻底测试故障客户端和服务器之间的网络。

  1. 测试失败的客户端是否可以在网络上看到SQL Server

    1. 使用"ODBC数据源"控制面板小程序从出现故障的客户端创建到SQL Server的ODBC连接。使用"测试数据源"按钮
    2. 测试是否可以使用SQLCMD从出现故障的客户端连接到SQL Server。请确保使用与客户端登录SQL Server时使用的凭据相同的凭据进行连接。例如:

      sqlcmd -S TestSQLServer'TestInstance1 -D TestDB -U TestUser -P TestPassword -Q select * from TestData