将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
- v10:
- 在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。 步骤如下:
- 从oracle.com(53 MB)下载“Xcopy Deployment”软件包中的“ODAC 11.2 Release 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;
添加using Oracle.DataAccess.Client;
到您的代码,现在您可以使用OracleConnection
,OracleCommand
和OracleDataReader
等types来访问Oracle数据库。 有关详细信息,请参阅类文档 。 没有必要使用tnsnames.oraconfiguration文件,只有连接string必须正确设置。 - 上面的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版本
这是一个典型的脚印,你将需要打包你的版本:
-
Oracle.ManagedDataAccess.dll
-
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,它工作正常。
ODAC xcopy将带你离开大约45MB。 http://www.oracle.com/technology/software/tech/windows/odpnet/index.html
这里是Oracle 11.2.0.4.0的更新。 我使用System.Data.OracleClient
在Windows 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:
- 确保没有其他的oracle目录在你的PATH中
- 设置您的path指向您的即时客户端
- 将您的TNS_ADMIN设置为指向tnsnames.ora文件所在的位置
- 设置你的NLS_LANG
- 请将您的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即时客户端常见问题