这是微软官方 ADO.NET Team Blog 去年就公布的消息:

http://blogs.msdn.com/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx

我 刚用 VS 2010 测试了一下,才确认这项消息的正确性。OracleClient 是微软针对 Oracle 开发所研发的 ADO.NET Data Provider,从 .NET 1.x 开始,就已成为 .NET Framework 类库的一部分,它与微软 Visual Studio 的集成性非常好。

该篇博文内容大概是说,微软未来不再支持 System.Data.OracleClient 这个 Data Provider 的研发,从 .NET 4 以后的版本,会将该类库移除 [1]。因此,虽然现在 System.Data.OracleClient 在 VS 2010 / .NET 4 里仍可使用,但在开发和编译时,会出现大量的「deprecated (不建议使用)」警告,如下图 1。

根据 ADO.NET OracleClient 产品经理 Himanshu Vasishth 的说法,这对大家现有的项目和代码没有任何影响,大家仍可继续用 OracleClient 来开发应用程序,但 ADO.NET Team 强烈建议用户和开发人员,改用其他厂商或第三方供应商的 Oracle provider。

未来微软对自家的 System.Data.OracleClient,不会再推出新功能,只会针对重大问题和 bug 做修正,并会继续将这些修正发布在 .NET Framework 4.0 的 service packs。另 System.Data.OracleClient 3.5 的支持会从 2013 年延长到 2018 年,System.Data.OracleClient 4.0 的支持则与 .NET Framework 4.0 的生命周期相同。


图 1 以 Visual Studio 2010 Ultimate RC 版 / .NET 4 项目测试,开发和编译时会出现大量的 Warning

以下是该文的后续讨论中,所列出的一些 System.Data.OracleClient 替代方案:

  1. ODP.NET from Oracle:
    Oracle 自家的解决方案,正宗且永久免费,使用人数及技术社区众多,听说性能比微软的 Oracle driver 更优 (这点未证实),但只提供基本的数据访问功能,不支持 ADO.NET Entity Framework。
    在 ODP.NET 10.2.0.4 之前的版本,常被抱怨版本号码必须与 Oracle 数据库正确对应。但听说新的 ODP.NET 11g,已可与所有版本的 Oracle 数据库兼容 (包括 9.2 版本),且在同一个操作系统上可安装多个版本。
    http://www.oracle.com/technology/tech/windows/odpnet/newfeatures.html
    http://www.oracle.com/technology/tech/dotnet/msoc/index.html
  2. Devart dotConnet for Oracle:
    正 式名称是 OraDirect.NET,可免费使用。可支持 ADO.NET Entity Framework。
    http://www.devart.com/dotconnect/oracle/
    http://devart.com/dotconnect/
  3. DataDirect ADO.NET Data Provider for Oracle:
    可支持 ADO.NET Entity Framework。
    http://www.datadirect.com/products/net/net_for_oracle/index.ssp
    http://www.datadirect.com/index.ssp
  4. Oracle Multi-Tier .Net Provider from OPENLINK:
    http://uda.openlinksw.com/dotnet/mt/dotnet-oracle-mt/
    http://www.openlinksw.com/

但 就我在网络上所看的,Oracle 自家的 ODP.NET,功能虽然强劲,但与微软的 .NET / Visual Studio 集成性不算好。必须在每台要开发和部署的机器上,下载、安装、设置、维护 ODP.NET provider 和其 Oracle client libraries (网络上常有指其很难安装的抱怨文);且其 library 的版本,在 ODP.NET 10.2.0.4 之前的版本,必须用对应版本的 Oracle ,像 Oracle 10g 就必须安装 10g ODP.NET,Oracle 9i 就必须安装 9i ODP.NET (这点是该文的后续讨论提到的,我未测试过,不确定是否正确),而微软的 OracleClient 则 无此问题,不必花时间安装和设置。且另外很重要的一点,ODP.NET 仍不支持微软的 ADO.NET Entity Framework 和 LINQ to Entities (可能是 Oracle 的商业策略)。

表面上看起来,是有很大比例的客户、MVPs 和开发人员,倾向用合作厂商或第三方厂商的 Oracle provider,且因为 Oracle 数据库的改版和更新速度也很快,这些第三方厂商能比较快地推出搭配 Oracle 数据库新功能的支持。微软认为,自己无需再花资源和时间,追在 Oracle 的研发团队和第三方提供者的后面跑。

我自己则认为,微软此 举绝对有战略意义,不见得像该博文所说的,只是为了节省从 .NET 到 Oracle 的版本控制或性能等研发资源。微软的目的之一,可能是想将他的客户,能从 Oracle 多拉一些回来。若客户的项目有特殊需求、关键应用,或想用一些 .NET 访问数据库的特定语法和性能优化 [2],建议你 用微软的 SQL Server;否则很对不起,要是将来 .NET 4.x、5、6、7、...平台有什么好用的功能、框架或语法,届时 Oracle 官方的 prodvider 不支持,就请各位用户自行负责,或直接现在就改用 SQL Server 来开发新的项目。

所以,随着 .NET 平台和 Visual Studio 越来越好用、营销越做越夸张,将来也会有越来越多的开发人员、IT 决策者会「强烈建议」他们的客户,最好使用微软的 SQL Server (大家都省时省事),而不要用 Oracle,否则一些开发方便性、执行性能上的甜头,例如一些 ADO.NET / DataReader 的语法甜头 [2],或像 LINQ to SQL 的轻量级和方便性,或是像现在 SQL Server 2008 新加入的一些类型和功能:HierarchyID 阶层类型、FileStream 大型对象的存储、地理空间类型 (Spatial Data Type),或是像 Service Broker 交换信息 (实现 SOA),或是未来一些新的 .NET 框架,若你坚持要用 Oracle 数据库,以上的种种可能将无法有效地和 .NET 程序整合。

若客户仍坚持相信 Oracle 才能处理海量关键的应用,没关系,微软将来会告诉你,「一般的」应用开发,用 Oracle Data Provider for .NET (ODP.NET) 或一些 ORM 框架,仍可正常运作,但势必 .NET Framework 平台的许多新功能和好处,你将会无法享用。若你仍不爱用 SQL Server,仍想用 Oracle/Java 或 Sybase (SAP) 等其他的解决方案,请不要忘记,现在企业的应用开发,已越来越走向被 .NET / Visual Studio 一家独揽的趋势。你的项目不用我家的 SQL Server,将来几年后若你的系统要改版或添加功能,后果自负。当然,SQL Server 只能运作在 Windows 操作系统上,最好将来所有企业新开发的项目,都被绑在 .NET/Visual Studio + SQL Server + Windows 上,若未来几年 Java 无法有效地发展或各个流派仍继续分歧,连带也会影响客户在新项目选用 Oracle 数据库的意愿。如此一来,二十年后微软将一统全世界企业的系统后台,届时号令天下谁敢不从。

本文同步发布在「ADO.NET - 博客园小组」:
http://home.cnblogs.com/group/ado/

--------------------------------------------------------------------------

相关文章:

[1] Oracle and ADO.NET (.NET 4, 中文版的内容尚未更新)
http://msdn.microsoft.com/en-us/library/77d8yct7.aspx

[2] DataReader 程序性能优化、透过 SqlConnection 的 ChangeDatabase 方法切换不同数据库而不启用分布式事务
http://www.cnblogs.com/WizardWu/archive/2008/07/11/1241174.html
http://www.cnblogs.com/WizardWu/archive/2010/02/16/1668769.html
http://www.cnblogs.com/WizardWu/archive/2010/02/04/1663127.html

[3] System.Data.OracleClient 将走入历史, 作者:李明儒 (繁体中文)
http://blog.darkthread.net/blogs/darkthreadtw/archive/2010/05/14/bye-ado-net-oracleclient.aspx
http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/10/11/road-to-oracle-linq.aspx

[4] migrate to the Oracle Data Provider for .NET
http://www.oracle.com/technology/tech/dotnet/msoc/index.html
http://cshay.blogspot.com/2009/07/microsoft-deprecates-oracleclient-time.html

[5] 其他网络文章 (简体中文)
http://bbs.dameng.com/viewthread.php?tid=859
http://www.pin5i.com/showtopic-24628.html
http://hi.baidu.com/coollzh/blog/item/51b4f235ddc2b81b91ef3964.html
http://lichao.net/weblog/web-development/aspnet/140.html

[6] Oracle 11g 学习笔记
http://www.cnblogs.com/WizardWu/archive/2008/11/25/1340867.html
http://www.cnblogs.com/WizardWu/archive/2008/11/27/1342174.html
http://www.cnblogs.com/WizardWu/archive/2008/11/28/1343100.html
http://www.cnblogs.com/WizardWu/archive/2008/11/30/1344096.html
http://www.cnblogs.com/WizardWu/archive/2008/12/07/1349665.html

方式1:直接利用.NET的oracle驱动连接
安装Oracle客户端驱动包
找到服务器端安装路径:E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN下tnsnames.ora,把该文件覆盖客户端驱动目下该文件
配置客户端驱动
1、打开数据源管理
2、选择系统DSN,点击[添加]
3、弹出的界面中选择Oracle in OraDB10g_1驱动,弹出Oracle ODBC  Driver  Configuration界面
4、填写四个数据项 Data Source Name    TNS  Services Name  User ID
其中TNS Servers Name指的是服务器端设置服务名称
这个部分可以省略
设置完成之后确定
引用System.data.oracleclient;
1 using System.data.oracleclient; 
2 string oradb = "Data Source=water;User Id=modis;Password=modis;Integrated Security=no"; 
3 OracleConnection conn = new OracleConnection(oradb); 
4 conn.Open(); 
(我的环境为VS2005,oracle数据源连接只支持到10g以下。)
方式2:安装完ODP.net(Oracle Data Provider.NET),通过OLEDB连接。 
引用System.Data.OleDb; 
1 using System.Data.OleDb; 
2 string oradb = "Provider=OraOLEDB.Oracle;Data Source=water;User Id=modis;Password=modis;"; 
3 OleDbConnection myConnection = new OleDbConnection(oradb); 
4 myConnection.Open();
方式3:安装完ODP.net,通过Oracle的连接器 
引用动态链接库Oracle.DataAccess.Client. 
1 using Oracle.DataAccess.Client; 
2 string oradb = "Data Source=water;User Id=modis;Password=modis;"; 
3 OracleConnection conn = new OracleConnection(oradb); // C# 
4 conn.Open();

微軟将从 .NET 4 以后的版本弃用 System.Data.OracleClient 以及Oracle 的各种连接方法的更多相关文章

  1. [转帖]微軟将从 .NET 4 以后的版本弃用 System.Data.OracleClient

    转帖--微軟将从 .NET 4 以后的版本弃用 System.Data.OracleClient Posted on -- : eaglet 阅读() 评论() 编辑 收藏 原贴 http://www ...

  2. 微軟将弃用 System.Data.OracleClient

    http://www.cnblogs.com/WizardWu/archive/2010/05/17/1737009.html 微軟将从 .NET 4 以后的版本弃用 System.Data.Orac ...

  3. .Net使用微軟自帶的用戶驗證和登錄授權

    使用微軟的用戶驗證,權限管理的方法 一.使用配置好的數據庫, 1.首先建立想定的數據庫(只填寫名字不加載任何表,如:Login數據庫) 2.使用vs兼容工具命令提示.如圖: 3.導入數據庫所需要的ta ...

  4. MahApps.Metro控件更換微軟視窗主題

    先來看一下微軟默認的視窗主題(左:Window)與MahApps.Metro的視窗主題(右:MetroWindow), Window   MetroWindow   MetroWindow似乎美觀多了 ...

  5. Chrome Apps將是Google送給微軟的特洛伊木馬?

    今天,Google 發表了 Chrome Apps,不同於之前 web app,此舉是要把 Chrome 瀏覽器升級為真正的 app 平台,將 Chrome OS 發展成一個成熟的作業系統,可以視為 ...

  6. 微服务springboot视频最新SpringBoot2.0.3版本技术视频教程【免费学习】

    超火爆的springboot微服务技术怎么学,看这里,springboot超详细的教程↓↓↓↓↓↓https://ke.qq.com/course/179440?tuin=9b386640 01.sp ...

  7. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_24-CMS前端页面查询开发-使用钩子方法实现立即查询

    进入页面默认就去查询数据 这要用到vue的钩子函数,每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听. 编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等. ...

  8. SSIS 無法將保護的 XML 節點 "DTS:Password" 解密,錯誤為 0x8009000B "機碼用在特定狀態時無效

    发现之前部署的SSIS,执行失败,查看日志 來源: 描述: 無法將保護的 XML 節點 -- ::-- ::-- :: DataReader 來源 [] 描述: System.Exception: S ...

  9. OpenCV中Kinect的使用(1)

    图像处理中一般为了更好的获取外部信息都会使用到Kinect,其优势在于除了传统的RGB摄像头之外,还拥有一个获取深度信息的3D深度感应器,因此可以获得外界物体的3维信息实现物体的跟踪.手势识别等各项功 ...

随机推荐

  1. ArrayList 和 LinkedList 的区别

    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.2.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动 ...

  2. centos 安装 py pyhs2

    1. yum install gcc-c++ cyrus-sasl-develpip2.7 install pyhs2 --->好像不行,在试试 用于 hive thrift 访问 2. os. ...

  3. WMI测试

    https://social.msdn.microsoft.com/Forums/windowshardware/zh-CN/c5af7959-95d3-4e1b-ab40-96a2a31c2af2/ ...

  4. 13.代理模式(Proxy Pattern)

    using System; namespace Test { //抽象角色:声明真实对象和代理对象的共同接口. //代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象, //同时代理 ...

  5. Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)

    1.NOSQL简介 nosql的产生并不是要彻底的代替关系型数据库,而是作为传统关系型数据库的一个补充. Facebook和360使用Cassandra来存储海量社交数据 Twitter在其url抓取 ...

  6. Algorithms, Part I by Kevin Wayne, Robert Sedgewick

    Welcome to Algorithms, Part I 前言 昨天在突然看到了Coursera上Robert Sedgewick讲的Algorithms,Part II看了一些,甚是爽快,所以又去 ...

  7. xml解析方法总结

    ==========================================xml文件<?xml version=”1.0″ encoding=”GB2312″?> <RES ...

  8. Install Docker on Mac OS X(转)

    Install Docker on Mac OS X You can install Docker using Boot2Docker to run docker commands at your c ...

  9. php计算几分钟前、几小时前等

    function format_date($time){ $t=time()-$time; $f=array( '=>'年', '=>'个月', '=>'星期', '=>'天' ...

  10. 【c++】必须在类初始化列表中初始化的几种情况

    转自:http://www.cnblogs.com/kaituorensheng/p/3477630.html 1. 类成员为const类型 2. 类成员为引用类型 #include <iost ...