服务器名称从 rdoConnection.Connect 字符串中消失

Server name dissapears from rdoConnection.Connect string

我正在使用旧的 Visual Basic 6 应用程序,它使用远程数据对象 (RDO) 2 连接到 Oracle11g 服务器。这是我的代码:

Dim rdoCon As New rdoConnection

rdoCon.Connect = "DRIVER={Microsoft ODBC for Oracle};SERVER=os11atst.world;"
Debug.Print rdoCon.Connect '1
'Prompt the user to enter credentials and connect to the server:
rdoCon.EstablishConnection rdDriverComplete, False
Debug.Print rdoCon.Connect '2

第一个 Debug.Print 给了我这个(如预期的那样):

DRIVER={Microsoft ODBC for Oracle};SERVER=os11atst.world;

然而,第二个给了我这个:

DRIVER={Microsoft ODBC for Oracle};UID=username;PWD=password;

缺少 SERVER 参数,即使连接正常。这对我来说是个问题,因为我需要知道连接到哪个服务器。我不能简单地使用第一个字符串中的信息,因为用户可以(并且应该)能够在要求输入用户名和密码的提示中更改服务器。

这个问题不知从何而来,可能与从 Windows XP 升级到 7 有关。以前该程序没有表现出这种行为,或者年长的同事告诉我。不过,不能 100% 确定这是正确的。

如何防止服务器名称不一致?我可以通过查看连接字符串以外的任何其他方式获取服务器的名称吗?

我对包括升级到比 RDO 更新的东西的解决方案不感兴趣。由于外部原因,我坚持使用它。

rdoCon.EstablishConnection 将覆盖您之前设置的任何内容。

听起来问题出在这台新机器上安装的 DSN 中。将其与安装在之前计算机上的 DSN 进行比较。它有您在这台新机器上缺少的配置。

我开发了一个不太好的解决方法来解决这个问题。我有一个名为 SETTINGS 的 table,其中包含列 NAMEVALUE。对于每个数据库,我都简单地添加了设置 servername 以及适当的值。我需要做的就是找出我连接的服务器然后查询数据库:

SELECT value FROM settings WHERE name = 'servername'

这当然是一个非常丑陋的 hack,所以欢迎任何更好的解决方案。