Oracle.DataAccess.Client 依赖项

Oracle.DataAccess.Client Dependencies

首先,我想用Oracle.DataAccess.dll来使用OracleBulkCopy

我想知道我需要能够从数据库中读取的所有 dll,然后在 Oracle 中执行批量复制。目前,我们只使用一个 dll 来执行所有从数据库中读取的操作,我们使用 Oracle.ManagedDataAccess.Client。但是我不能用它来执行批量复制。

我不想为用户安装ODP.NET,我想直接在程序中包含dll。所以我想知道能够在 32 位和 64 位中使用 Oracle.DataAccess.dll 所需的最低 dll。

我知道有一些关于此的旧 post,但它很旧并且列出的 dll 已过时。我找不到其中一些。

我为 ODAC12 安装了 ODP.net 并且我检索了这个 post. I also tried with with this post 中列出的所有 dll。列出的 dll 指出版本 11。

我做了一个虚拟项目,它打开一个连接,读取一个 table 并将其批量放入另一个 table。我从项目根目录中的 post 复制了列出的 dll,并将 Oracle.DataAccess.dll 包含在项目中。

当我 运行 我的 64 位程序时,出现以下错误:

Could not load file or assembly 'Oracle.DataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342'

当我在 32 位中 运行 时,我得到这个错误:

Unable to load DLL 'OraOps12.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)"

我包含的 dll 是:

您似乎没有安装 Oracle Instant 客户端(或任何其他版本的 Oracle 客户端)。这是非托管 ODP.NET 提供程序的先决条件。

安装 Oracle Instant 客户端就可以了。否则只会惹麻烦。

我成功了。

  • 下载适合您的项目的 ODAC 版本。
  1. 对于 32bit 项目,您需要下载 ODAC12..._x32.zip (ODAC121021Xcopy_32bit.zip).

  2. 对于 64bit 项目,您需要下载 ODAC12..._x64.zip

  • 根据您想要的版本(32 位与 64 位)将其解压缩到一个空文件夹中。

  • 通过在 windows 搜索栏中搜索 *.dll,在 instantclient_12_1 文件夹中找到所有 dll。你需要抓住:

  1. oci.dll

  2. ociw32.dll

  3. orannzsbb12.dll

  4. oraociei12.dll

  5. oraons.dll

  • 根据您的 .NET 版本,在 odp.net4odp.net20 文件夹中找到这两个 dll:
  1. OraOps12.dll

  2. Oracle.DataAccess.dll

  • 复制那些 32 位 dll 或 64 位 dll,并将它们直接放在项目的输出路径中。例如在 C:\...\vsProjects\BulkInsert\BulkInsert\bin\Debug.

  • 通过指向输出路径在您的项目中浏览 Oracle.DataAccess.dll。

UPD:最新版本的 ODP.NET 提供程序(从 here 下载)的文件名中有“19”后缀而不是“12”:

  1. oci.dll

  2. ociw32.dll

  3. orannzsbb19.dll

  4. oraociei19.dll

  5. oraons.dll

  6. OraOps19.dll

  7. Oracle.DataAccess.dll

我遇到过类似的问题;安装oracle数据访问组件(odac ODTwithODAC122010.zip)解决。