通过在笔记本电脑上下载并安装客户端管理工具和Visual Studio 2008,我已成功连接到C#(Visual Studio 2008)的Oracle数据库(10g)。
Oracle客户端工具的安装占用空间超过200Mb,且耗时很长。
有谁知道最小可行足迹是什么?我希望它是一个DLL和一个寄存器命令,但我觉得我需要安装一个oracle home,并设置各种环境变量。
我在我的代码中使用了Oracle.DataAccess。
答案 0 :(得分:69)
您需要Oracle客户端才能连接到Oracle数据库。最简单的方法是安装Oracle Data Access Components。
为了减少占地面积,我建议如下:
sales-server:1521/sales.us.acme.com
。这相当于 19Mb (v10)。
如果您不关心在多个应用程序之间共享此文件夹,则可以选择将上述DLL与应用程序二进制文件一起发送,并跳过PATH设置步骤。
如果您绝对需要使用Oracle提供程序(Oracle.DataAccess),则需要:
请注意,我尚未测试此最新配置...
答案 1 :(得分:16)
截至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
以下是您需要在发布时打包的典型足迹:
Oracle.ManagedDataAccess.dll
Oracle.ManagedDataAccessDTC.dll
所有这些,高达 6.4 MB的.Net 4.0。
答案 2 :(得分:15)
我在Windows XP上使用Pandicus建议的方法,使用ODAC 11.2.0.2.1。步骤如下:
using Oracle.DataAccess.Client;
添加到您的代码中,现在您可以使用OracleConnection
,OracleCommand
和OracleDataReader
等类型来访问Oracle数据库。有关详细信息,请参阅class documentation。无需使用tnsnames.ora配置文件,只需正确设置connection string 。 答案 3 :(得分:14)
这种方式允许您使用oracle中的5个可再发行文件连接ODP.net:
Chris's blog entry: Using the new ODP.Net to access Oracle from C# with simple deployment
编辑:如果博客每次都发生故障,这里有一个简短的总结......
确保从相同的ODP.Net / ODAC发行版中获取所有这些DLL以避免版本号冲突,并将它们全部放在与EXE相同的文件夹中
答案 4 :(得分:8)
DevArt http://www.devart.com/,以前的CoreLab(crlab.com)提供了一个纯C#Oracle客户端。这是一个单独的dll,它工作正常。
答案 5 :(得分:5)
以下是 Oracle 11.2.0.4.0 的更新。我使用System.Data.OracleClient
在 Windows 7 上成功完成了以下步骤。
1. 下载即时客户端软件包 - 基本精简版: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
3. 构建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.OracleClient需要Oracle客户端软件版本8.1.7”,请参阅this question。
答案 6 :(得分:3)
ODAC xcopy将为您带来大约45MB的空间。 http://www.oracle.com/technology/software/tech/windows/odpnet/index.html
答案 7 :(得分:2)
我在Oracle论坛上发现这篇文章非常有用:
备注:ADO.NET团队不推荐使用System.Data.OracleClient,因此对于将来的项目,您应该使用ODP.NET
繁殖:
设置以下环境变量:
- 确保PATH中没有其他oracle目录
- 将路径设置为指向您的即时客户端
- 将 TNS_ADMIN 设置为指向tnsnames.ora文件所在的位置 位于
- 设置 NLS_LANG
- 将 ORACLE_HOME 设置为您的即时客户端
醇>对我来说,我将NLS_LANG设置为
http://download-east.oracle.com/docs/html/A95493_01/gblsupp.htm#634282
我通过使用即时客户端的sqlplus插件验证了这是使用了正确的客户端软件。
对我而言,我设定: SET NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252
注意:在进行任何更改之前,请备份Oracle注册表项(如果存在)并备份任何环境变量的字符串。