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

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

Oracle客户端工具的安装足迹超过了200Mb,并且相当长的时间。

有谁知道最小可行的足迹是什么? 我希望它是一个单一的DLL和一个注册命令,但我有我需要安装一个Oracle主页,并设置各种环境variables的感觉。

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

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

为了减less占用空间,我build议如下:

  • 使用框架附带的Oracle的Microsoft提供程序(System.Data.OracleClient)。
  • 下载Oracle即时客户端软件包 – 基本精简版:这是一个(几乎)最低限度的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(msvcr71.dll)的CRT DLL添加到此文件夹中,因为Oracle员工忘记阅读本文 …
  • 将此文件夹添加到PATH环境variables。
  • 在您的应用程序中使用Easy Connect命名方法来摆脱臭名昭着的TNSNAMES.ORAconfiguration文件。 它看起来像这样: sales-server:1521/sales.us.acme.com

这相当于19Mb (v10)。

如果你不关心在几个应用程序之间共享这个文件夹,另一种方法是将上面提到的DLL和应用程序二进制文件一起发送,然后跳过PATH设置步骤。

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

  • ODP .NET 11.1.0.6.20(涉及Instant Client的第一个版本)。
  • 即时客户端11.1.0.6.0,显然。

请注意,我没有testing过这个最新的configuration…

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

  1. 从oracle.com(53 MB)下载“Xcopy Deployment”软件包中的“ODAC 11.2 Release 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;添加using Oracle.DataAccess.Client; 到您的代码,现在您可以使用OracleConnectionOracleCommandOracleDataReader等types来访问Oracle数据库。 有关详细信息,请参阅类文档 。 没有必要使用tnsnames.oraconfiguration文件,只有连接string必须正确设置。
  4. 上面的4个DLL必须和你的可执行文件一起部署。

截至2014年,OPD.NET,托pipe驱动程序是最小的占地面积。

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

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

这是一个典型的脚印,你将需要打包你的版本:

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

所有在一起,.NET 4.0 高达 6.4 MB。

通过这种方式,您可以使用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相同的文件夹中

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

这里是Oracle 11.2.0.4.0的更新。 我使用System.Data.OracleClientWindows 7上成功完成了以下过程。

1.下载即时客户端软件包 – 基本精简版 : Windows 32位或64位 。

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

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.构build一个不需要tnsnames.ora的连接string。

(请参阅下面的testing程序中的示例。)

运行这个最小的C#程序来testing你的安装:

 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” ,请参阅此问题 。

我在Oracle论坛上发现这个post非常有用:

如何使用Visual Studio设置Oracle Instant Client

备注:ADO.NET团队正在废弃System.Data.OracleClient,以便将来使用ODP.NET的项目

再生产:

设置以下环境variables:

  1. 确保没有其他的oracle目录在你的PATH中
  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加载项到即时客户端来validation这是使用正确的客户端软件。

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

注意:在进行任何更改之前,备份您的Oracleregistry项(如果存在)并备份任何环境variables的string。

阅读Oracle即时客户端常见问题