VS2010中用微软自带的System.Data.OracleClient来连接Oracle数据库

由于微软在.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 VasishthADO.NET团队博客文章中宣布了这一决定。

但在.Net框架4.0中微软将会继续支持System.Data.OracleClient,但会被标记为“不宜使用”,根据Vasishth的说法,这对现有的应用程序没有任何影响,它们将会按预期运转得很好。

他在文章中提到“使用OracleClient开发新的应用程序仍然是可行的,但在.Net 4.0中编译时会弹出一个警告对话框,编译好后,运行时不会再弹出警告对话框,我们强烈建议用户使用我们合作伙伴的ADO.NET Provider for Oracle代替微软OracleClient进行新应用程序的开发”。

第三方提供Oracle数据提供程序的有DataDirectDevart科技公司,此外还有Oracle公司的数据提供程序,叫做Oracle Data Provider for .NET (ODP.NET),这些都是很流行的Oracle数据库提供程序。

位于纽约的新技术公司twentysix首席执行官 Andrew Brust在一封电子邮件中说“Oracle自身对ADO.NET的支持以及Visual Studio本身已经被人们普遍看好,Oracle公司有一个专职的ADO.NET团队,他们已经做得非常好了”。

微软最有价值专家本杰明认为微软这个决定非常有意义,微软为社么要卑躬屈膝支持连接到竞争对手的数据库呢?特别是有调查数据显示微软的客户都倾向于转向Oracle,微软肯定会不爽。同时,这也省去了微软.NetOracle的版本控制或性能问题。

微软表示将继续提供bug修复和关键更新,但这一切都仅限于.Net 框架4.0中,以后就难说了


连接oracle数据库异常System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本

本人在用公司用C#写的服务连接数据库oracle 时,报出上面的错误:连接oracle数据库异常System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。在网上查了好多,试了都没有用,但是通过网上查询,说是找不到oracleoci.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();
        }
    }
}

运行结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/WuLex/article/details/81007248