由于微软在.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`问题导致
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();
}
}
}