远程连接的SQL数据库可以从一个客户端访问而不是从另一个客户端访问

时间:2014-10-16 22:37:08

标签: c# sql sql-server winforms

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

应用程序按计划在服务器和一个客户端上运行,但是当我尝试从第二个客户端访问相同的数据时,我收到“登录前握手”错误。

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

任何人都可以给我任何关于问题可能的指示吗?

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

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

1 个答案:

答案 0 :(得分:0)

检查网络

你的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

As discussed in this thread,尝试将SQL Server设置为侦听特定网络接口并尝试连接到该接口的IP地址。注意:如果客户端代码是通过DHCP动态分配的,请不要对客户端代码进行硬编码以与该IP地址通信。

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

检查您与SQL Server的连接

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

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

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

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