当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《将C#连接到Oracle数据库所需的最小客户端占用空间是多少?》经验,为你挑选了6个好方法。

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

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

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

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



1> Mac..:

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

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

使用随框架提供的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家伙忘记阅读此内容 ...

将此文件夹添加到PATH环境变量.

在应用程序中使用Easy Connect命名方法来摆脱臭名昭着的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.

请注意,我还没有测试过这个最新配置......


使用仅在我的开发机器上安装的ODAC版本11.2.0.1.2,我能够通过复制oci.dll,Oracle.DataAccess.dll,oraociei11.dll和OraOps11w.dll进行部署.我没有必要在生产机器上安装任何东西,这太棒了.我的开发机器是Win7 x64,我在一个vanilla WinXP x86 VM(.NET Framework,而不是其他)上测试了生产.

2> ecoe..:

截至2014年,OPD.NET,托管驱动程序占地面积最小.

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

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

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

    Oracle.ManagedDataAccess.dll

    Oracle.ManagedDataAccessDTC.dll

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



3> kol..:

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

    从oracle.com(53 MB)下载"带Xcopy部署的ODAC 11.2版本3(11.2.0.2.1)"软件包,并解压缩ZIP.

    收集以下DLL:oci.dll(1 MB),oraociei11.dll(130 MB!),OraOps11w.dll(0.4 MB),Oracle.DataAccess.dll(1 MB).剩余的东西可以删除,不需要安装任何东西.

    添加对Oracle.DataAccess.dll的引用,添加using Oracle.DataAccess.Client;到您的代码中,现在您可以使用类似的类型OracleConnection,OracleCommand以及OracleDataReader访问Oracle数据库.有关详细信息,请参阅类文档.无需使用tnsnames.ora配置文件,只需正确设置连接字符串.

    以上4个DLL必须与您的可执行文件一起部署.


我发现这种方法有效.明显的缺点是oraociei11.dll现在是130MB,截至v11.2 :(

4> Fidel..:

这种方式允许您使用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相同的文件夹中



5> 小智..:

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



6> DavidRR..:

以下是Oracle 11.2.0.4.0的更新.我在Windows 7上使用以下过程取得了成功System.Data.OracleClient.

1.下载Instant Client Package - Basic Lite:Windows 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",请参阅此问题.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有