我们有许多用VB6 (而不是.NET)编写的应用程序已经运行了近20年。这些应用程序在Windows 2007 64位服务器上运行,并使用32位客户端连接到Oracle-11。到目前为止,连接字符串包含"Provider=OraOLEDB.Oracle“,很好。
问题是,出于超出此线程范围的原因,我们需要转换为Oracle-12 64位。在安装了Oracle 12-client (并卸载了Oracle-11 client)之后,在尝试打开连接时,我们得到了以下错误:"Provider not be found. It and not be not client。“
我确信我们确实安装了客户端,因此担心VB6无法使用64位客户端连接到Oracle。
不幸的是,显然简单的解决方案是不可能的:
你知道怎么解决这个问题吗?
发布于 2017-09-30 05:37:44
OLE-DB
好消息和坏消息;因为Visual basic6.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驱动程序
另一种连接方式是使用ODBC驱动程序,每种方法都有优缺点,因此google可以找到它们。
首先,您需要安装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位version....not,令人困惑!
发布于 2017-09-30 05:50:44
(如果你不能遵循twoleggedhorse的解决方案,那就更好了。)
您可以在.NET 32位中编写一个小的动态链接库,并将其设置为COM可见,以便您的32位应用程序可以使用它。
我在我的评论中说过,在.NET中似乎可以与DB without an installed client对话。
为了让它不那么痛苦,你可以编写一个类似ADO的类(例如,一个类来替换RecordSet,另一个类用于连接,等等)。然后将其作为引用添加到项目中,并执行搜索/替换。
https://stackoverflow.com/questions/46496929
复制相似问题