24

我编写了一个连接到 Oracle 10g 数据库的 C# 应用程序。使用 Oracle 数据访问组件 11.2“ODAC”,它可以在我的机器上完美运行。

现在我想部署应用程序并将其安装在另一台仅具有 .NET Framework 的“干净机器”中!而且我不想将整个 ODAC 组件安装给用户!

我怎么能那样做?我试图将所有必要的 DLL 文件包含到我的 bin 文件夹中,例如:

  • oci.dll
  • ociw32.dll
  • Oracle.DataAccess.dll
  • orannzsbb11.dll
  • oraocci11.dll
  • oraociicus11.dll
  • OraOps11w.dll
  • msvcr71.dll

但它仍然没有奏效。我应该怎么做才能解决这个问题?

4

3 回答 3

27

您不需要单独安装任何 Oracle 客户端。我将以下内容安装在与 .exe 相同的目录中:

   Oracle.DataAccess.dll

   oci.dll 

   OraOps11w.dll

   oraociei11.dll

   msvcr71.dll 

确保您的项目引用您提供的相同 Oracle.DataAccess.dll。这适用于从未安装过 oracle 客户端的新电脑。

我通过指定这样的连接字符串来避免使用 TNSNAMES.ora

连接字符串 = 数据源="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=))" + "(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME = )))"

如果您使用的是 TNSNAMES.ora,只需将连接详细信息剪切并粘贴到单行字符串中。

请参阅 将 C# 连接到 Oracle 数据库所需的最小客户端占用空间是多少?

了解更多信息。

  • ejm

有关如何获取上述 dll 的信息,请参阅本教程:http ://begeeben.wordpress.com/2012/08/01/accessing-oracle-database-without-installing-oracle-client/

于 2010-12-10T10:01:01.617 回答
13

由于发布了这个问题,Oracle Managed Client 现在可用(由 Oracle 提供)。我一直在使用它,没有任何问题。不需要寻找 DLL 或特殊配置。只需添加包,修改配置文件,就可以了。NuGet Link和Oracle的一篇关于它的文章。

由于此客户端完全用 .NET 托管代码编写,因此它独立于体系结构,不需要外部 DLL、安装 Oracle 客户端或类似的东西。

您可以使用包管理器将其安装在 VS 中。

Install-Package Oracle.ManagedDataAccess

我已经把它放在 machine.config 文件中(尽管它也可以在 web.config 或 app.config 中工作)。我发现这有助于避免与可能安装的其他驱动程序发生冲突:

<configuration>
    <system.data>
        <DbProviderFactories>
          <remove invariant="Oracle.DataAccess.Client" />
          <remove invariant="Oracle.ManagedDataAccess.Client" />
          <add name="ODP.NET, Managed Driver"
               invariant="Oracle.ManagedDataAccess.Client"
               description="Oracle Data Provider for .NET, Managed Driver"
               type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
        </DbProviderFactories>
      </system.data>
<configuration>

然后为您的连接字符串:

 <add name="MyConnectionString" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=IPORNAMEOFHOST)(PORT=PORTNUM)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORACLESID)));User Id=ORACLEUSER;Password=ORACLEPASSWORD;" providerName="Oracle.ManagedDataAccess.Client"/>
  • IPORNAMEOFHOST= 这是您的服务器的 IP 地址或 DNS 名称。
  • PORTNUM= 这是 Oracle 正在侦听的端口号。通常为 1521。
  • ORACLESID= 您尝试连接的数据库的 SID。
  • ORACLEUSER= 用于连接的用户名。
  • ORACLEPASSWORD= 用于连接的密码。
于 2014-05-19T20:27:34.933 回答
9

我不确定您关心的是除了安装约 50 MB ODAC 之外还必须安装 Oracle 客户端,还是仅仅安装独立的 ODAC。

如果担心必须安装 Oracle 客户端和 ODAC,您可以使用Oracle Instant Client吗?这是安装 Oracle 客户端占用空间最小的方法。您还需要 ODAC xcopy 补充。

如果您关心的只是 ODAC 安装,我认为没有更小的可用空间。

于 2010-10-14T18:10:05.803 回答