0

我在同一个本地网络 (Wi-Fi) 上有 2 台笔记本电脑(A 和 B)。

我在笔记本电脑 A 上安装了 Oracle 数据库 12c r2。

在笔记本电脑中,AI 使用 Visual Studio 2017 创建了一个可以连接到 Oracle 数据库的 VB.NET 应用程序。

该应用程序在笔记本电脑 A 上运行良好。它连接到数据库,这是我的应用程序表单,我使用的连接字符串(192.168.20.98 是我的笔记本电脑 A IP 地址):

应用程序工作屏幕,来自笔记本电脑 A

oracle_connection = New OracleConnection(
    "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=" & protocol.Text &
    ")(HOST=" & host.Text & ")(PORT=" & port.Text &
    ")))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" & db_name.Text &
    ")));User Id=" & user_id.Text & ";Password=" & pswd.Text)

我还编辑了我的listener.oratnsnames.ora位于C:\app\mustafa\product\12.2.0\dbhome_1\network\admin 以下位置:

listener.ora

# listener.ora Network Configuration File: 
C:\app\mustafa\product\12.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\mustafa\product\12.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = 
"EXTPROC_DLLS=ONLY:C:\app\mustafa\product\12.2.0\dbhome_1\bin\oraclr12.dll")
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.98)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

tnsnames.ora

# tnsnames.ora Network Configuration File: 
C:\app\mustafa\product\12.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

DB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.98)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db1)
)
)

LISTENER_DB1 =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.98)(PORT = 1521))


ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)

我已经编辑了我的 Oracle 主文件夹权限以提供authenticated users完全访问权限。

因此,当我将我的应用程序移动到笔记本电脑 B 并运行它以连接到笔记本电脑上的数据库时,AI 出现了这个错误:

System.Data.OracleClient 需要 Oracle 客户端软件版本 8.1.7 或更高版本。

笔记本电脑 B 的错误屏幕

我找不到任何解决方案。是否也需要在我的笔记本电脑 B 上安装 Oracle 数据库 12c r2?

4

1 回答 1

1

命名空间是 Oracle的System.Data.OracleClient.NET Framework 数据提供程序,但仍需要在目标计算机上安装 Oracle 客户端软件:

Oracle 和 ADO.NET | 微软文档

Oracle 的 .NET Framework 数据提供程序使用Oracle 客户端软件提供的 Oracle 调用接口 (OCI) 提供对 Oracle 数据库的访问。

和:

.NET Framework 数据提供程序 | 微软文档

对于 Oracle 数据源。适用于 Oracle 的 .NET Framework 数据提供程序支持Oracle 客户端软件版本 8.1.7 及更高版本,并使用 System.Data.OracleClient 命名空间。

但是,正如文档中所述:

笔记

System.Data.OracleClient 中的类型已弃用。这些类型在当前版本的 .NET Framework 中仍受支持,但将在未来版本中删除。Microsoft 建议您使用第三方 Oracle 提供商。

因此,最好使用Oracle Data Provider for .NET (ODP.NET),而不是弃用的System.Data.OracleClient. 这里有一篇3 步迁移文章可在此过程中提供帮助。

无论如何,Microsoft 或 Oracle 数据提供者仍然需要在目标机器上安装 Oracle 客户端软件。Oracle 客户端软件名为Oracle Instant Client,可在此处找到。

如果您已经在目标机器上安装了 Oracle Instant Client,您可以尝试其中一种(我认为问题的作者已经这样做了):

于 2018-11-12T15:43:41.347 回答