繁体   English   中英

VB6应用程序可以连接到SQL Server,但.NET应用程序不能

[英]VB6 applications can connect to SQL Server, but .NET applications can't

我们的系统结合使用VB6遗留应用程序和较新的.NET应用程序。 应用程序部署到我们的客户端,他们从终端服务器框运行应用程序,SQL Server数据库在不同的框上运行。

VB6应用程序工作正常,而所有.NET应用程序在启动时都会失败(尝试连接到数据库以读取配置信息),每次都有错误:

System.Data.SqlClient.SqlException:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:TCP提供程序,错误:0 - 连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机无法响应而建立连接失败。)

这是非常奇怪的事情:我在C#中创建了一个测试.NET应用程序,它复制了.NET应用程序使用的确切连接字符串 - 我部署了一个显示所使用的实际连接字符串的应用程序的检测版本 - 以及测试应用程序的工作原理

VB6连接字符串(有效): Provider=SQLOLEDB;Data Source=servername;Initial Catalog=databasename;User ID=username;Password=password;

.NET连接字符串(两者都有效和不起作用): Data Source=servername;Initial Catalog=databasename;User ID=username;Password=password;Application Name="ourappname"

我们的其他客户都没有遇到过同一个二进制文件的问题,这告诉我.NET应用程序如何与这个特定客户端系统进行交互是一个问题。

我应采取哪些步骤来解决/解决此问题? 我现在真的很茫然。 我希望其他人之前见过这个问题; 我在Google上找不到任何相关内容。


  • 这两个框都是在VMWare上运行的Windows Server 2008 R2 SP1,并且位于同一个域中
  • 两个盒子都运行ESET NOD32; 禁用没有改变任何东西
  • SQL Server是2008 R2 RTM的默认实例(在同一个框中也有2008和2008 R2命名实例)
  • 应用程序(和我的测试应用程序)是.NET 4.0
  • 该应用程序使用SQL登录进行身份验证(是的,我检查了失败的应用程序使用的密码是否正确)
  • 某些.NET应用程序使用不同的代码来执行应用程序启动,但它们都表现出相同的错误
  • 一些.NET应用程序是C#,一些是VB,一些是混合的(VB应用程序,C#核心程序集)
  • 我试过修复.NET 4.0安装
  • 我试过重启两个盒子
  • 我已经尝试部署源二进制文件,以便绕过我们的部署子系统(如果它导致某种类型的损坏)
  • 我在本地编译的检测应用程序经历了与通过Team System构建的原始应用程序相同的行为

我发现这种行为通常有几个主要原因:

  1. SQL Server未配置为侦听特定连接类型。 要确定这一点,请在SQL计算机上打开SQL Server配置管理器,单击SQL Server网络COnfiguraiton,然后单击MSSQLServer的协议。 验证是否已启用TCP / IP。

  2. SQL Server不允许远程连接(如果其他应用程序正在连接,那么这显然不是问题)。

  3. 客户端计算机未配置为使用SQL Server支持的协议与SQL Server通信,或者客户端计算机输入的配置信息不正确。 要验证这一点,请从Run ...提示符运行cliconfg,并确保启用了相应的协议,并且Alias选项卡中没有任何冲突的别名。 我通常会为连接字符串中配置的计算机名称添加一个特定的IP地址,以防出现DNS问题(至少用于测试)。

  4. 由于VB6客户端工作,而.Net客户端不工作,因此64位与32位访问可能存在问题。 如果您的应用程序是针对64位或任何CPU编译的,您可以尝试使用32位构建来查看是否可以解析访问权限。 如果是这样,那么这很可能是64位SQL客户端配置问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM