http://www.cnblogs.com/WizardWu/archive/2010/05/17/1737009.html

微軟将从 .NET 4 以后的版本弃用 System.Data.OracleClient。

这是微软官方 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

微軟将弃用 System.Data.OracleClient的更多相关文章

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

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

  2. 微軟将从 .NET 4 以后的版本弃用 System.Data.OracleClient 以及Oracle 的各种连接方法

    这是微软官方 ADO.NET Team Blog 去年就公布的消息: http://blogs.msdn.com/adonet/archive/2009/06/15/system-data-oracl ...

  3. csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别

    ODP.NET: 引用: using Oracle.DataAccess; //Oracle g 11.2.0 using Oracle.DataAccess.Client; using Oracle ...

  4. System.Data.Oracleclient需要Oracle客户端软件Version8.1.7或更高版本问题

    C#连接ORACLE报System.Data.Oracleclient需要Oracle客户端软件Version8.1.7或更高版本问题: 开始Webservice在32位系统ORACLE10g库中we ...

  5. VS2010里, using System.Data.OracleClient; 不可用

    当我试图去引用System.Data.OracleClient 这个命名空间时,VS 显示不存在 但是在对象浏览器里却可以找到这个命名空间及里边的对象 另外好像也没有区分清楚 using 和Refer ...

  6. oracleclient连oracle库 报System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本

    在iis下发布eworkflow+eform+ebiao的代码,访问oracle的数据库,用oracleClient或者oledb的方式连接,有时会报“System.Data.OracleClient ...

  7. 关于IIS部署时出现“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”的问题解决摘要

    系统环境:windows2008 X64 IIS版本:iis7 oracle客户端版本:11g,另外装了32位的客户端. 网站.net framework版本: 4.0 目前状况,IIS可以正常运行, ...

  8. vs2015连接oracle 11g(.net自带方式 using System.Data.OracleClient;)

    1,添加引用 System.Data.OracleClient 2,连接语句 string connectionString; string queryString; connectionString ...

  9. System.Data.OracleClient.OracleConnection已过时

    解决办法如下: 1.把原来的using System.Data.OracleClient;去掉 2.在oracle安装目录下找到Oracle.DataAccess.dll 添加引用:using Ora ...

随机推荐

  1. 四种IO模型

    四种 IO 模型:       首先需要明确,IO发生在 用户进程 与 操作系统 之间.可以是客户端IO也可以是服务器端IO. 阻塞IO(blocking IO):     在linux中,默认情况下 ...

  2. Java编程思想读书笔记_第6章

    如何创建一个包: 比如创建一个包名为com.huawei 则在一个目录下如(d:\java)创建目录com/huawei 然后在huawei目录下创建一个文件Assist.java package c ...

  3. Position属性四个值:static、fixed、absolute和relative的区别

    1.static(静态定位):默认值.没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明). 2.relative(相对定位):生成相对 ...

  4. 个人作业-Alpha测试

    课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 作业要求 https://edu.cnblogs.com/campu ...

  5. Jmeter之JDBC请求参数化(一)

    一.环境准备 a.jmeter5.1.1版本最新版本,可以去网页下载:https://jmeter.apache.org/download_jmeter.cgi b.jdbc驱动:链接:https:/ ...

  6. mac系统,鼠标移动太慢

    to check your speed: defaults read -g com.apple.mouse.scaling to set your speed defaults write -g co ...

  7. 关于iframe与$.load()哪个更好

    iframe与$.load()哪个更好       iframe可以直接加载页面,但是要付出降低搜索引擎搜索效率的代价,它引入静态文件的方式是完全独立的,简单意思就是,在页面一(父级页面)用ifram ...

  8. oracle 备份/恢复

    oracle备份是为了有问题能够快速恢复:

  9. libevent reference Mannual III--working with events

    FYI: http://www.wangafu.net/~nickm/libevent-book/TOC.html Working with events Libevent’s basic unit ...

  10. 2n皇后 - 回溯

    题目地址:http://www.51cpc.com/web/problem.php?id=1172 Summarize: 1. 递归回溯: 2. 先扫完一种皇后,再扫描另一种: 3. 循环输入: 4. ...