代码之家  ›  专栏  ›  技术社区  ›  Jonathan

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

  •  71
  • Jonathan  · 技术社区  · 16 年前

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

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

    有人知道最小可行足迹是什么吗?我希望它是一个单独的DLL和一个REGISTER命令,但是我觉得我需要安装一个Oracle Home,并设置各种环境变量。

    我正在代码中使用oracle.dataaccess。

    8 回复  |  直到 9 年前
        1
  •  69
  •   Mac    15 年前

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

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

    • 使用随框架提供的Microsoft Provider for Oracle(System.Data.OracleClient)。
    • 下载 Oracle Instant Client Package -基本Lite:这是一个压缩文件,几乎是最小值。我推荐10.2.0.4版,比11.1.0.6.0版小得多。
    • 将以下文件解压缩到特定文件夹中:
      • V10:
        • OCI.DLL
        • OrnZSBSB10DLL
        • oraociicus10.dll文件
      • V11:
        • OCI.DLL
        • OrnZSBSB11DLL
        • ORAOCIIE11DLL
    • 在x86平台上,将crt dll for Visual Studio 2003(msvcr71.dll)添加到此文件夹中,因为Oracle的家伙忘记了 read this
    • 将此文件夹添加到PATH环境变量中。
    • 使用 Easy Connect Naming 方法来清除臭名昭著的tnsnames.ora配置文件。看起来是这样的: sales-server:1521/sales.us.acme.com .

    这相当于大约 19MB (V10)。

    如果您不关心在几个应用程序之间共享这个文件夹,另一种选择是将上面提到的DLL和应用程序二进制文件一起发送,并跳过路径设置步骤。

    如果绝对需要使用Oracle提供程序(oracle.dataaccess),则需要:

    • odp.net 11.1.0.6.20(据称与即时客户端一起工作的第一个版本)。
    • 显然,即时客户端11.1.0.6.0。

    请注意,我没有测试这个最新配置…

        2
  •  16
  •   ecoe    10 年前

    截至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.ManagedData访问.dll
    2. Oracle.ManagedDataAccessDTC.dll

    一起,A 隆隆的 .NET 4.0为6.4 MB。

        3
  •  15
  •   kol    13 年前

    我使用上面Pandicus建议的方法,在WindowsXP上,使用ODAC11.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)、oraocie11.dll(130 MB!),oraops11w.dll(0.4 MB),oracle.dataaccess.dll(1 MB)。剩下的东西可以删除,不需要安装任何东西。
    3. 添加对oracle.dataaccess.dll的引用,添加 using Oracle.DataAccess.Client; 到您的代码,现在您可以使用如下类型 OracleConnection , OracleCommand OracleDataReader 访问Oracle数据库。见 class documentation 详情。不需要使用tnsnames.ora配置文件,只需要 connection string 必须正确设置。
    4. 以上4个DLL必须与可执行文件一起部署。
        4
  •  14
  •   Danny Varod    12 年前

    通过这种方式,您可以使用来自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
    • OrnZSBSB11DLL
    • OracoCIS11DLL
    • OCIW32.DLL

    确保从同一odp.net/odac分发中获取所有这些dll,以避免版本号冲突,并将它们与exe放在同一文件夹中。

        5
  •  8
  •   Thomas Boesen    16 年前

    德瓦特 http://www.devart.com/ 以前的corelab(crlab.com)提供纯C Oracle客户端。这是一个单独的动态链接库,它工作正常。

        6
  •  5
  •   Community Jaime Torres    7 年前

    这是的更新 Oracle 11.2.0.4.0版 . 我成功地完成了以下程序 视窗7 使用 System.Data.OracleClient .

    1。 下载 即时客户端包-基本Lite : Windows 32-Bit 64-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
    

    三。 构造一个连接字符串, 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.oracle client需要Oracle客户端软件版本8.1.7” this question .

        7
  •  3
  •   smo    16 年前
        8
  •  2
  •   Vincent De Smet    15 年前

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

    How to setup Oracle Instant Client with Visual Studio

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

    繁殖:

    设置以下环境变量:

    1. 确保路径中没有其他Oracle目录
    2. 设置你的 路径 指向您的即时客户
    3. 设置你的 TnSnAdmin 指向tnsnames.ora文件所在的位置 位于
    4. 设置你的 纳尔斯朗
    5. 设置你的 奥拉克雷之家 给你的即时客户

    对我来说,我把nls ou lang设置为

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

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

    对我来说,我设定: 设置nls_lang=American_America.we8mswin1252

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

    Read the Oracle Instant Client FAQ here