Oracle.DataAccess.Client 依赖项

14
首先,我想使用Oracle.DataAccess.dll来使用OracleBulkCopy。我想知道所有需要的dll文件才能从数据库中读取数据并在Oracle中执行大容量复制。目前,我们只使用一个dll文件从数据库中读取所有内容,我们使用的是Oracle.ManagedDataAccess.Client。但是我无法使用它来执行bulkCopy操作。
我不想为用户安装ODP.NET,我想直接将dll文件包含在程序中。因此,我想知道最少需要的dll文件才能在32位和64位计算机上使用Oracle.DataAccess.dll
我知道以前有一些关于这个问题的旧帖子,但已经过时了,列出的dll文件已经找不到了。我甚至找不到其中的一些文件。
我安装了ODAC12的ODP.net,并检索了此帖子中列出的所有dll文件。我还尝试了这个帖子。列出的dll文件指向版本11。
我创建了一个虚拟项目,打开连接,读取表格并在另一个表格中进行大容量复制。我将帖子中列出的dll文件从根目录复制到该项目中,并在项目中包含了Oracle.DataAccess.dll
当我在64位计算机上运行程序时,出现以下错误:

无法加载文件或程序集 'Oracle.DataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342'

当我在32位计算机上运行它时,出现以下错误:

无法加载DLL文件'OraOps12.dll':指定的模块找不到。

找不到dll文件。(HRESULT异常:0x8007007E)

我包含的dll文件有:

  • oci.dll
  • ociw32.dll
  • Oracle.DataAccess.dll
  • orannzsbb12.dll
  • oraocci12.dll
  • oraociei12.dll
  • OraOps12.dll

你愿意为第三方连接器付费吗?换句话说,如果你需要的话,你的雇主是否愿意花费几百美元购买一些软件来完成这项工作? - Hambone
第三方连接器的名称是什么? - billybob
2
不要试图逐个处理dll,这样会带来很多问题。可以看看“XCOPY”安装方式。它更小巧,而且可以嵌入到自己的安装程序中。http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html - Christian Shay
自从2009年以来,我一直在使用DevArt的dotConnect for Oracle。它需要付费,但是它可以消除本地Oracle客户端(如Managed ODP)的依赖,并且仍然支持高级OCI功能,例如批量插入和更新。当然,它全部都是可以GAC或本地化的托管DLL。 - Hambone
3个回答

19
我成功地使它工作了。
  • 下载适用于您的项目的良好版本ODAC。
  1. 对于32位项目,您需要下载ODAC12..._x32.zip(ODAC121021Xcopy_32bit.zip)。

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

  • 将其解压缩到空文件夹中,具体取决于您想要的版本(32位与64位)。

  • instantclient_12_1文件夹中查找所有dll,方法是在Windows搜索栏中搜索*.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位或64位的dll文件复制并直接放置在项目的输出路径中。例如在C:\...\vsProjects\BulkInsert\BulkInsert\bin\Debug中。

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

Solution Explorer Screenshot

更新:最近版本的ODP.NET提供程序(从这里下载)在其文件名中使用“19”后缀而不是“12”:

  1. oci.dll

  2. ociw32.dll

  3. orannzsbb19.dll

  4. oraociei19.dll

  5. oraons.dll

  6. OraOps19.dll

  7. Oracle.DataAccess.dll


我认为最好从文件夹instantclient_12_1中复制所有文件(相当于安装Oracle Instance Client)。在您的环境中可能有效,但在稍微不同的条件下可能会失败。 - Wernfried Domscheit
注意不要从错误位数版本的Oracle复制DLL。我曾经这样做,直到我从同一版本的Oracle Instant Client获取了所有DLL,才解决了这个错误:https://stackoverflow.com/questions/38589549/system-typeinitializationexception-the-type-initializer-for-oracle-dataaccess - Matthew

1
我遇到了类似的问题;安装Oracle数据访问组件(ODAC ODTwithODAC122010.zip)可以解决问题。

1
你能为那个文件添加一个链接吗? - jbouaziz
你可以在页面上选择版本。链接 - engntsn

0

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

安装Oracle Instant客户端,一切都会好起来。否则,您将遇到无尽的麻烦。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接