WizardWu 编程网

一位台湾的程序员,研究 OOD、.NET 平台在企业信息化之应用、WCF & 工作流、性能调优、数据库。

博客园 首页 新随笔 联系 订阅 管理
  87 Posts :: 0 Stories :: 999 Comments :: 35 Trackbacks
微軟将从 .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


--------------------------------------------------------------------------
posted on 2010-05-17 01:47 WizardWu 阅读(5544) 评论(28) 编辑 收藏

Feedback

#1楼 2010-05-17 02:42 skyaspnet      
MS还是相当有想法
 回复 引用 查看   

#2楼 2010-05-17 02:59 toEverybody      
又开始象以前对付Java一样地对付Oracle了,呵呵。。微软狠
 回复 引用 查看   

#3楼 2010-05-17 04:04 ITniao      
狠 版权什么的,搞死人啦
 回复 引用 查看   

#4楼 2010-05-17 08:29 冰泉      
这个ms早就说明过了,是因为他们这个组件没有社区里的那个性能好,所以建议直接用社区的组件
 回复 引用 查看   

#5楼 2010-05-17 08:32 killkill      
这个早有耳闻了。
 回复 引用 查看   

#6楼 2010-05-17 08:56 邢少      
我也觉得微软很有商业头脑。技术是一方面,但是商情也很高
 回复 引用 查看   

#7楼 2010-05-17 09:05 Kevin Zou      
odp.net自家的東東做的都不如MS做的精致,懷疑他們有沒有做過測試(long raw類型死活讀不出資料,最后改用System.Data.OracleClient才解決)
 回复 引用 查看   

#8楼[楼主] 2010-05-17 09:06 WizardWu      
其他 3rd party provider 早已支持微软的 ADO.NET Entity Framework,
为何唯独 Oracle 自家的 ODP.NET 刻意不支持?
显然不是技术上的问题。

 回复 引用 查看   

#9楼 2010-05-17 09:07 Frank Xu Lei      
哈哈,确实有商业利益的竞争考虑。

 回复 引用 查看   

#10楼 2010-05-17 09:18 jolboy      
哎~~这样做很郁闷~~客户才不管开发人员怎么的麻烦呢~~他们要oracle的时候,累死的就是我们开发人员
 回复 引用 查看   

#11楼 2010-05-17 11:01 Aixe      
很好
 回复 引用 查看   

#12楼 2010-05-17 11:06 ToBin      
Oracle要做好Oracle privider for java
肯定不会做好Oracle privider for .net
毕竟各家有各家的产品,而且都是套装,+攻+防还有额外属性
.net 和sql server使用成本太高,微软目前又在国内通过法律手段推行MS正版化进程,这样多数人会转向JAVA,PHP,mysql postgres等低成本产品。

 回复 引用 查看   

#13楼 2010-05-17 11:10 Fred_Xu      
微软很聪明
 回复 引用 查看   

#14楼 2010-05-17 12:00 飞越樊篱      
@ToBin
MS方案 系统软件贵 但开发和维护成本低
orcl方案 系统软件低 但开发和维护代价高
这个可以算算在决定哪一个好

 回复 引用 查看   

#15楼 2010-05-17 12:19 赵伟      
看好微软!
 回复 引用 查看   

#16楼 2010-05-17 12:41 钧梓昊逑      
还没用过社区的组件呢
 回复 引用 查看   

#17楼[楼主] 2010-05-17 13:00 WizardWu      
感谢楼上各位宝贵的意见。

 回复 引用 查看   

#18楼 2010-05-17 13:12 孤剑      
微软的想法还是比较厉害,什么东西都指向自己。
 回复 引用 查看   

#19楼 2010-05-17 15:18 ToBin      
@飞越樊篱
^_^ 但是老板不认这个啊,老板就知道别人都用php,java 都说便宜,他就认为便宜!

 回复 引用 查看   

#20楼 2010-05-17 18:33 virus      
靠,不会吧,想让我死啊,昨天才开完会,下个阶段准备换Oracle呢?这回怎么办呢?老板又不管,认定oracle比sql好,我怎么办啊?郁闷死了?NET还是得用啊?
 回复 引用 查看   

#21楼 2010-05-17 18:56 文明的天空      
怎么有点恐怖的感觉呀!
 回复 引用 查看   

#22楼[楼主] 2010-05-17 19:46 WizardWu      
感谢各位的回复。

若新系统是要用 VS 2008 / .NET 3.5 开发,应没差吧,系统不致于无法运作。
顶多只是几年后,得不到微软的技术支持。

 回复 引用 查看   

#23楼[楼主] 2010-05-18 21:42 WizardWu      

Silverlight 4 Tools for Visual Studio 2010 和 WCF RIA Services 1.0 发布

http://www.cnblogs.com/jv9/archive/2010/05/18/1737857.html

wcf ria service 微软的视频里用的例子都是 entity framework

 回复 引用 查看   

#24楼[楼主] 2010-05-19 22:19 WizardWu      
由於 Silverlight 當中使用的 WCF RIA Services, 會用到 ADO.NET Entity Framework,因此學員有問到 ADO.NET Entity Framework 是否支援 Oracle, 當時我回答說只要有 Provider 即可,但手邊沒有具體支援的套件資料, 因此回家之後找了一下筆記, 底下這套是支援 ADO.NET Entity Framework 的 Oracle Connection Povider, 提供大家參考...
http://www.facebook.com/pages/David-deNET-Walker-zhuan-ye/115848851788030

 回复 引用 查看   

#25楼 2011-05-22 04:49 聪明的傻瓜      
求一个 System.Data.OracleClient 下载地址 就这么难吗,我找了1个小时了。微软上没有百度上没,一些小网站有害怕是病毒
 回复 引用 查看   

#26楼 2011-07-07 14:29 ols      
lz看下这里:http://www.oracle.com/technetwork/topics/dotnet/multipledbs-089665.html
怀疑lz把ODP.NET的意思理解错了。
截止ODP.NET 11,ODP.NET仍然是与oracle client绑定的,即ODP.NET 10只能与oracle 10g client部署在一台电脑上。而通过ODP.NET,可以连接817即以上版本的服务端。
建议lz亲自测试一下兼容性再说,不然这种广泛转载的文章,误导性很大。

 回复 引用 查看   

#27楼 2011-07-20 17:32 咸鱼翻身      
这个东西真是搞死人,odp面对web和win居然还不是一个。
楼主咋处理的?

 回复 引用 查看   

#28楼[楼主] 2011-11-19 20:15 WizardWu      
感谢楼上几位园友给的信息。

Oracle免客户端For .Net(增加分析Devart和DataDirect)
http://www.cnblogs.com/nnhy/archive/2011/10/30/2229444.html

 回复 引用 查看