通过在笔记本电脑上下载并安装客户端管理工具和Visual Studio 2008,我已成功连接到C#(Visual Studio 2008)的Oracle数据库(10g).
Oracle客户端工具的安装占用空间超过200Mb,而且耗时很长.
有谁知道最小可行足迹是什么?我希望它是一个DLL和一个寄存器命令,但我觉得我需要安装一个oracle home,并设置各种环境变量.
我在我的代码中使用Oracle.DataAccess.
您需要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.
请注意,我还没有测试过这个最新配置......
截至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.
我在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必须与您的可执行文件一起部署.
这种方式允许您使用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的更新.我在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",请参阅此问题.