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

 

 

这是微软官方 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 的生命周期相同。

微軟将从 .NET 4 以后的版本弃用 System.Data.OracleClient 以及Oracle 
的各种连接方法
图 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 的各种连接方法

上一篇:MySQL global Log


下一篇:jboss EAP 6.2 + Message Drive Bean(MDB) 整合IBM Webshpere MQ 7.5