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

时间:2008-09-16 09:11:45

标签: c# oracle client

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

Oracle客户端工具的安装占用空间超过200Mb,且耗时很长。

有谁知道最小可行足迹是什么?我希望它是一个DLL和一个寄存器命令,但我觉得我需要安装一个oracle home,并设置各种环境变量。

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

8 个答案:

答案 0 :(得分:69)

您需要Oracle客户端才能连接到Oracle数据库。最简单的方法是安装Oracle Data Access Components

为了减少占地面积,我建议如下:

  • 使用随框架提供的Microsoft提供程序for Oracle(System.Data.OracleClient)。
  • 下载Oracle Instant Client Package - 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家伙忘了read this ...
  • 将此文件夹添加到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。

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

答案 1 :(得分:16)

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

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

您需要在项目中下载这些dll并引用Oracle.ManagedDataAccess.dll: 下载ODP.NET, Managed Driver Xcopy version only

以下是您需要在发布时打包的典型足迹:

  1. Oracle.ManagedDataAccess.dll
  2. Oracle.ManagedDataAccessDTC.dll
  3. 所有这些,高达 6.4 MB的.Net 4.0。

答案 2 :(得分:15)

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

  1. 从oracle.com(53 MB)下载“带Xcopy部署的ODAC 11.2版本3(11.2.0.2.1)”软件包,并解压缩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;添加到您的代码中,现在您可以使用OracleConnectionOracleCommandOracleDataReader等类型来访问Oracle数据库。有关详细信息,请参阅class documentation。无需使用tnsnames.ora配置文件,只需正确设置connection string
  4. 上述4个DLL必须与您的可执行文件一起部署。

答案 3 :(得分:14)

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

Chris's blog entry: Using the new ODP.Net to access Oracle from C# with simple deployment

编辑:如果博客每次都发生故障,这里有一个简短的总结......

  • OCI.DLL
  • Oracle.DataAccess.dll
  • oraociicus11.dll
  • OraOps11w.dll
  • orannzsbb11.dll
  • oraocci11.dll
  • OCIW32.DLL
  

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

答案 4 :(得分:8)

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

答案 5 :(得分:5)

以下是 Oracle 11.2.0.4.0 的更新。我使用System.Data.OracleClient Windows 7 上成功完成了以下步骤。

1. 下载即时客户端软件包 - 基本精简版Windows 32-Bit64-Bit

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. 构建omits the need for 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”,请参阅this question

答案 6 :(得分:3)

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

答案 7 :(得分:2)

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

How to setup Oracle Instant Client with Visual Studio

备注:ADO.NET团队不推荐使用System.Data.OracleClient,因此对于将来的项目,您应该使用ODP.NET

繁殖:

  

设置以下环境变量:

     
      
  1. 确保PATH中没有其他oracle目录
  2.   
  3. 路径设置为指向您的即时客户端
  4.   
  5. TNS_ADMIN 设置为指向tnsnames.ora文件所在的位置   位于
  6.   
  7. 设置 NLS_LANG
  8.   
  9. ORACLE_HOME 设置为您的即时客户端
  10.         

    对我来说,我将NLS_LANG设置为

         

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

         

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

         

    对我而言,我设定:   SET NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252

         

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

         

    Read the Oracle Instant Client FAQ here