由于微软在.Net框架4.0中已经决定撤销使用System.Data.OracleClient,造成在VS2010中无法连接Oracle数据库,但它还依旧存在于.Net架构中,我们可以通过自己引用
C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.OracleClient.dll 来获得对Oracle数据库的支持。
方法:
1、在VS2010中打开[解决方案管理器]--右击[引用]--[添加引用]
2、选择[浏览]找到“C:\Windows\Microsoft.NET\Framework\v2.0.50727”目录,在下面选择System.Data.OracleClient.dll之后就可以在程序编辑窗口使用using System.Data.OracleClient了
另外:微软决定撤销System.Data.OracleClient内容如下:
对于那些开发.Net应用程序而数据库又是Oracle的人来说,这则新闻显得特别有意义,微软正打算将Oracle数据提供程序从ADO.NET路线图中移除。
微软决定撤销System.Data.OracleClient是因为有相当数量的MVP都倾向于选择第三方Oracle数据提供程序,负责 ADO.NET OracleClient的产品经理Himanshu Vasishth在ADO.NET团队博客文章中宣布了这一决定。
但在.Net框架4.0中微软将会继续支持System.Data.OracleClient,但会被标记为“不宜使用”,根据Vasishth的说法,这对现有的应用程序没有任何影响,它们将会按预期运转得很好。
他在文章中提到“使用OracleClient开发新的应用程序仍然是可行的,但在.Net 4.0中编译时会弹出一个警告对话框,编译好后,运行时不会再弹出警告对话框,我们强烈建议用户使用我们合作伙伴的ADO.NET Provider for Oracle代替微软OracleClient进行新应用程序的开发”。
第三方提供Oracle数据提供程序的有DataDirect和Devart科技公司,此外还有Oracle公司的数据提供程序,叫做Oracle Data Provider for .NET (ODP.NET),这些都是很流行的Oracle数据库提供程序。
位于纽约的新技术公司twentysix首席执行官 Andrew Brust在一封电子邮件中说“Oracle自身对ADO.NET的支持以及Visual Studio本身已经被人们普遍看好,Oracle公司有一个专职的ADO.NET团队,他们已经做得非常好了”。
微软最有价值专家本杰明认为微软这个决定非常有意义,微软为社么要卑躬屈膝支持连接到竞争对手的数据库呢?特别是有调查数据显示微软的客户都倾向于转向Oracle,微软肯定会不爽。同时,这也省去了微软.Net到Oracle的版本控制或性能问题。
微软表示将继续提供bug修复和关键更新,但这一切都仅限于.Net 框架4.0中,以后就难说了
连接oracle数据库异常System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
本人在用公司用C#写的服务连接数据库oracle 时,报出上面的错误:连接oracle数据库异常System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。在网上查了好多,试了都没有用,但是通过网上查询,说是找不到oracle的oci.dll文件,故在系统环境配置中,PATH中加上我自己oracle client的安装路径:D:\app\admin\product\11.2.0\client_1\BIN; 即可,如果PATH中之前本来有内容,则在D:\app\admin\product\11.2.0\client_1\BIN此目录前加上;
一、点击 “高级系统设置”;
二、点击环境变量
三、编辑修改
asp.net 连接oracle,报错误。“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。
使用Oracle数据库不一定要安装客户端
System.Data.OracleClient需要Oracle客户端软件 8.1.7 或更高版本。
解决方法
1.下载instantclient_11_2,解压到任意目录下
2.在配置一下环境变量。
系统变量:在Path中,加入dll的路径;eg:D:\Program Files\PremiumSoft\Navicat Premium\instantclient_11_2
用户变量:加一个ORACLE_HOME,也是这个路径;
3.重启电脑(重要)
1.Navicat Premium 配置连接Oracle 数据库,
可能出现的错误:
1.连接数据库`cannot load OCI DLL,193`
1.还有一个可能就是`126`的错误,都是这个`oci.dll`问题导致
C#实现不安装Oracle客户端访问远程服务器数据
在未安装Oracle数据库客户端的前提下,C#通过使用ADO的方式远程访问服务器,会出现:“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”问题,本文提供一种方式解决该问题。
具体步骤步骤如下:
第一步:下载Instant Client 文件
Oracle官方网站提供了Instant Client文件的下载,下载地址为:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html,里面提供了支持不同操作系统和不同Oracle版本的对应下载,根据不同需求自己选择。
我的系统环境如下:
数据库服务器:WindowsServer2008x64
数据库服务端:oracle11.2.0.1.0
客户端系统:Windows7x64
因此我选择下载了instantclient-basic-win-x86-64-11.2.0.1.0.zip
只需在客户端将其解压即可(位置任意),我解压在d盘根目录,生成一个文件夹d:\instantclient_11_2(然后将其修改成oracleclient,根据自己需要修改),里面就是连接远程数据库要用到的dll文件。
第二步:配置环境变量
1、 在PATH变量中增加【;D:\oracleclient】,即就是刚才我们解压Instant Client所在的目录;
2、增加以下三个变量:
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
TNS_ADMIN= D:\oracleclient
LD_LIBRARY_PATH= D:\oracleclient
第三步:配置tnsnames.ora文件
在 D:\oracleclient目录中增加一个tnsnames.ora文件,内容为访问数据库的配置信息。具体步骤为:新建一个txt文档,然后将一下内容复制进去,另存为tnsnames.ora即可。
ORCL=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = 192.168.1.107)
(PORT = 1521)
)
)
(CONNECT_DATA =
(SERVICE_NAME = lottery)
)
)
其中的HOST、PORT、SERVICE_NAME需要根据数据库实际信息进行修改。
说明,以下需要根据实际情况修改:
HOST = 服务器地址IP 或服务器名称
PORT = 服务器端口号,默认为“1521“
SERVICE_NAME = 服务器数据库服务的名字,默认为:”orcl“
此时在C#代码中的连接字符串可以按如下方式定义:
String conn = @"DataSource=ORCL;Persist Security Info=True;User Id=用户名;Password=密码";
否则,如果想省略第三步,在C#代码中的连接字符串必须按如下方式定义:
String conn = String.Format("Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS= (PROTOCOL = TCP)(HOST = 192.168.1.107)(PORT = 1521))) (CONNECT_DATA=(SERVICE_NAME = lottery) ) );User Id=用户名;Password=密码;");
第四步:重启系统
C#代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OracleClient;
namespace TestOracle
{
class Program
{
static void Main(string[] args)
{
String conn = @"Data Source=ORCL;Persist Security Info=True;User Id=testdb;Password=manager";
String conn1 = String.Format("Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.107)(PORT = 1521))) (CONNECT_DATA =(SERVICE_NAME = lottery) ) );User Id=testdb;Password=manager;");
OracleConnection oc = new OracleConnection(conn);
try
{
oc.Open();
OracleCommand cmd = oc.CreateCommand();
cmd.CommandText = "select sysdate from dual";
OracleDataReader odr = cmd.ExecuteReader();
while (odr.Read())
{
Console.WriteLine(odr.GetDateTime(0).ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
oc.Close();
}
Console.Read();
}
}
}
运行结果: