71

通过在我的笔记本电脑上下载并安装客户端管理工具和 Visual Studio 2008,我已成功从 C# (Visual Studio 2008) 连接到 Oracle 数据库 (10g)。

Oracle 客户端工具的安装占用空间超过 200Mb,而且相当冗长。

有谁知道最小可行的足迹是多少?我希望它是一个单独的 DLL 和一个注册命令,但我觉得我需要安装一个 oracle home,并设置各种环境变量。

我在我的代码中使用 Oracle.DataAccess。

4

8 回答 8

71

您需要一个 Oracle 客户端才能连接到 Oracle 数据库。最简单的方法是安装Oracle 数据访问组件

为了尽量减少占用空间,我建议如下:

  • 使用框架附带的 Microsoft 提供程序 for Oracle (System.Data.OracleClient)。
  • 下载Oracle Instant Client 软件包- Basic Lite:这是一个 zip 文件,(几乎)是最低限度的。我推荐版本 10.2.0.4,它比版本 11.1.0.6.0 小很多。
  • 在特定文件夹中解压缩以下文件:
    • v10:
      • oci.dll
      • orannzsbb10.dll
      • oraociicus10.dll
    • v11:
      • oci.dll
      • orannzsbb11.dll
      • oraociei11.dll
  • 在 x86 平台上,将 Visual Studio 2003 的 CRT DLL (msvcr71.dll) 添加到此文件夹中,因为 Oracle 人员忘记阅读此内容...
  • 将此文件夹添加到 PATH 环境变量。
  • 在您的应用程序中使用Easy Connect Naming方法来摆脱臭名昭著的 TNSNAMES.ORA 配置文件。它看起来像这样:sales-server:1521/sales.us.acme.com

这相当于大约19Mb (v10)。

如果您不关心在多个应用程序之间共享此文件夹,另一种方法是将上述 DLL 与您的应用程序二进制文件一起提供,并跳过 PATH 设置步骤。

如果您绝对需要使用 Oracle 提供程序 (Oracle.DataAccess),您将需要:

  • ODP .NET 11.1.0.6.20(据称可与 Instant Client 一起使用的第一个版本)。
  • Instant Client 11.1.0.6.0,很明显。

请注意,我尚未测试此最新配置...

于 2008-09-16T10:06:11.513 回答
15

我使用上面 Pandicus 建议的方法,在 Windows XP 上,使用 ODAC 11.2.0.2.1。步骤如下:

  1. 从 oracle.com (53 MB) 下载“ODAC 11.2 Release 3 (11.2.0.2.1) with Xcopy Deployment”包,然后解压缩 ZIP。
  2. 收集以下 DLL:oci.dll (1 MB)、oraociei11.dll (130 MB!)、OraOps11w.dll (0.4 MB)、Oracle.DataAccess.dll (1 MB)。剩下的东西可以删除,什么都不需要安装。
  3. 添加对 Oracle.DataAccess.dll 的引用,添加using Oracle.DataAccess.Client;到您的代码中,现在您可以使用和之类OracleConnection的类型来访问 Oracle 数据库。有关详细信息,请参阅类文档。无需使用 tnsnames.ora 配置文件,只需正确设置连接字符串即可。OracleCommandOracleDataReader
  4. 上述 4 个 DLL 必须与您的可执行文件一起部署。
于 2011-07-07T10:07:38.723 回答
15

截至 2014 年,OPD.NET 托管驱动程序是最小的占用空间。

这是与以前(过时)答案建议的非托管版本的代码使用比较:http: //docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148

您将需要下载这些 dll 并Oracle.ManagedDataAccess.dll在您的项目中引用:仅下载ODP.NET,托管驱动程序 Xcopy 版本

这是一个典型的足迹,您需要与您的版本一起打包:

  1. Oracle.ManagedDataAccess.dll
  2. Oracle.ManagedDataAccessDTC.dll

总而言之, .Net 4.0高达6.4 MB。

于 2014-10-20T15:51:32.623 回答
14

这种方式允许您使用来自 oracle 的 5 个可再发行文件连接 ODP.net:

Chris 的博客条目:使用新的 ODP.Net 通过简单的部署从 C# 访问 Oracle

编辑:万一博客每次宕机,这里有一个简短的总结......

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

确保您从同一个 ODP.Net / ODAC 发行版中获取所有这些 DLL,以避免版本号冲突,并将它们全部放在与您的 EXE 相同的文件夹中

于 2009-09-11T05:12:29.170 回答
8

DevArt http://www.devart.com/,以前的 CoreLab (crlab.com) 提供纯 C# Oracle 客户端。那是一个 dll,它工作正常。

于 2008-09-16T09:34:16.303 回答
5

这是Oracle 11.2.0.4.0的更新。我在Windows 7上使用System.Data.OracleClient.

1.下载Instant Client 包 - Basic LiteWindows 32 位64 位

2.将以下文件复制到系统路径中的某个位置:

32 位

 1,036,288  2013-10-11  oci.dll
   348,160  2013-10-11  ociw32.dll
 1,290,240  2013-09-21  orannzsbb11.dll
   562,688  2013-10-11  oraocci11.dll
36,286,464  2013-10-11  oraociicus11.dll

64 位

   691,712  2013-10-09  oci.dll
   482,304  2013-10-09  ociw32.dll
 1,603,072  2013-09-10  orannzsbb11.dll
 1,235,456  2013-10-09  oraocci11.dll
45,935,104  2013-10-09  oraociicus11.dll

3.构造一个不需要tnsnames.ora的连接字符串。

(请参见下面测试程序中的示例。)

4.运行这个最小的 C# 程序来测试你的安装:

using System;
using System.Data;
using System.Data.OracleClient;

class TestOracleInstantClient
{
    static public void Main(string[] args)
    {
        const string host = "yourhost.yourdomain.com";
        const string serviceName = "yourservice.yourdomain.com";
        const string userId = "foo";
        const string password = "bar";

        var conn = new OracleConnection();

        // Construct a connection string using Method 1 or 2.
        conn.ConnectionString =
            GetConnectionStringMethod1(host, serviceName, userId, password);

        try
        {
            conn.Open();
            Console.WriteLine("Connection succeeded.");
            // Do something with the connection.
            conn.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine("Connection failed: " + e.Message);
        }
    }

    static private string GetConnectionStringMethod1(
        string host,
        string serviceName,
        string userId,
        string password
        )
    {
        string format =
            "SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
            "(HOST={0})(PORT=1521))" +
            "(CONNECT_DATA=(SERVER=DEDICATED)" +
            "(SERVICE_NAME={1})));" +
            "uid={2};" +
            "pwd={3};"; // assumes port is 1521 (the default)

        return String.Format(format, host, serviceName, userId, password);
    }

    static private string GetConnectionStringMethod2(
        string host,
        string serviceName,
        string userId,
        string password
        )
    {
        string format =
            "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
            "(HOST={0})(PORT=1521))" +
            "(CONNECT_DATA=(SERVER=DEDICATED)" +
            "(SERVICE_NAME={1})));" +
            "User Id={2};" +
            "Password={3};"; // assumes port is 1521 (the default)

        return String.Format(format, host, serviceName, userId, password);
    }
}

最后提示:如果您遇到错误“System.Data.OracleClient 需要 Oracle 客户端软件版本 8.1.7”,请参阅此问题

于 2014-04-18T20:34:48.940 回答
3

ODAC xcopy 将为您提供大约 45MB 的空间。 http://www.oracle.com/technology/software/tech/windows/odpnet/index.html

于 2008-09-16T09:27:23.230 回答
2

我发现 Oracle 论坛上的这篇文章也非常有用:

如何使用 Visual Studio 设置 Oracle Instant Client

备注:ADO.NET 团队正在弃用 System.Data.OracleClient,因此对于未来的项目,您应该使用 ODP.NET

再生产:

设置以下环境变量:

  1. 确保您的 PATH 中没有其他 oracle 目录
  2. 将您的PATH设置为指向您的即时客户端
  3. 将您的TNS_ADMIN 设置为指向 tnsnames.ora 文件所在的位置
  4. 设置你的NLS_LANG
  5. 将您的ORACLE_HOME设置为您的即时客户端

对我来说,我将 NLS_LANG 设置为

http://download-east.oracle.com/docs/html/A95493_01/gblsupp.htm#634282

我通过使用即时客户端的 sqlplus 插件验证了这是使用正确的客户端软件。

对我来说,我设置:SET NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

注意:在进行任何更改之前,请备份您的 Oracle 注册表项(如果存在)并备份任何环境变量的字符串。

在此处阅读 Oracle Instant Client 常见问题解答

于 2009-10-07T03:11:54.270 回答