我们有许多用VB6(不是.NET)编写的应用程序已经运行了近20年。 这些应用程序在Windows 2007 64位服务器上运行,并通过32位客户端连接到Oracle-11。 连接字符串包含" Provider = OraOLEDB.Oracle" 到目前为止,非常好。
问题是我们需要将超出此线程范围的原因转换为Oracle-12 64位。 安装Oracle 12客户端(并卸载Oracle-11客户端)后,尝试打开连接时出现以下错误: "无法找到提供商。它可能没有正确安装。"
我确定我们安装了客户端,因此担心VB6无法使用64位客户端连接到Oracle。
显然,简单的解决方案是不可能的: - 转换为.NET或任何东西,并在64位下编译 - 保留32位oracle客户端。
知道如何解决这个问题吗?
答案 0 :(得分:4)
好消息和坏消息;因为Visual Basic 6.0是32位程序而没有64位编译器,所以必须安装32 bit Oracle Data Access Components
软件,即使数据库本身在64位Oracle数据库安装中的64位服务器上运行,特别是你需要32 bit Oracle Provider for OLE DB
而不是整个客户。
可在此处找到驱动程序(下载ODAC XCopy版本): http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html
以下主题描述了您的确切问题以及修复它的说明: https://hoopercharles.wordpress.com/2012/11/25/connecting-to-an-oracle-database-with-visual-basic-6-0-on-windows-8-64-bit/
另一种连接方式是使用ODBC驱动程序,每种方法都有利弊,所以谷歌可以找到它们。
首先,您需要安装64位客户端附带的SQORA32 ODBC driver
或上面链接的ODAC。
接下来,您需要创建一个ODBC连接,可在此处找到说明: https://tensix.com/2012/06/setting-up-an-oracle-odbc-driver-and-data-source/
最后,您需要在VB6中更改连接字符串以使用新创建的ODBC连接。下面的内容应该很好地工作(显然nameOfDatabase是给你的odbc连接的名字):
Provider=MSDASQL;Dsn=nameOfDatabase;Uid=usernameHere;Pwd=passwordHere
设置DSN时要小心,请确保使用可在以下位置找到的32位ODBC连接管理器:
c:\windows\sysWOW64\odbcad32.exe
可以在system32
文件夹中找到相同的程序,但这是64位版本....根本不会混淆!
答案 1 :(得分:0)
(如果你不能遵循twoleggedhorse的解决方案,那就更好了。)
您可以在.NET 32位中编写 small DLL,并使其可见,以便32位应用程序可以使用它。
我在评论中说,似乎可以在.NET中与数据库without an installed client交谈。
要通过最少的痛苦,你可以写它类似于ADO(即替换RecordSet的类,另一个用于Connection的类,等等)。然后将其添加为项目的参考并执行搜索/替换。