【问题标题】:VB.NET: Unable to connect to an Oracle database server from client appVB.NET:无法从客户端应用程序连接到 Oracle 数据库服务器
【发布时间】:2019-04-14 12:59:48
【问题描述】:

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

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

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

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

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)

我还编辑了位于C:\app\mustafa\product\12.2.0\dbhome_1\network\adminlistener.oratnsnames.ora 如下:

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 并运行它以连接到笔记本电脑 A 上的数据库时,我收到了以下错误:

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

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

【问题讨论】:

  • 不,这不是所需的整个 oracle 客户端软件。它只需要足够的 oracle 客户端接口就可以连接到您的服务器。按照堆栈跟踪的要求执行 - 即安装 oracle 客户端界面。
  • @shahkalpesh 我只是觉得有点困惑,我必须在 B 笔记本电脑上安装 oracle 客户端界面对吗?你能给我确切的下载链接吗? oracle网站有很多下载链接,下载的非常相似
  • 将两台计算机连接到同一个 wifi 并不意味着您有本地网络。尝试使用ping 192.168.20.98 命令从笔记本电脑 B ping 笔记本电脑 A,并告诉我们结果如何。
  • hello @PedroGaspar 我从 B ping 到 A 并获得 0% 的数据包丢失
  • 所以你可能必须按照@shahkalpesh 的建议去做,并在笔记本电脑 B 上安装 OracleClient。问题是 System.Data.OracleClient 现在是 obsolete 有一段时间了,所以你最好使用 Oracle 本身的 ODP.NET。看看这个3 steps migration article

标签: vb.net oracleclient system.data.oracleclient


【解决方案1】:

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

Oracle and ADO.NET | Microsoft Docs

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

还有:

.NET Framework Data Providers | Microsoft Docs

对于 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 steps migration article 可以在此过程中提供帮助。

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

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

【讨论】:

  • 嗨@PedroGaspar,很抱歉因为忙于观看大量编程教程而迟到了回复,但是我已经更改为 ODP.NET 并且可以说它非常好,但是,非常感谢您提供这些重要信息你为我提供了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 2020-02-09
  • 1970-01-01
  • 2012-10-15
  • 2022-01-08
相关资源
最近更新 更多