08年做项目时,用 VS 2005,写据库层还在用 MSDP(System.Data.OracleClient),但是当时由于要操作 XML 和二进制文件,所以又使用了 ODP.NET(Oracle.DataAccess.dll)。那时的第一感觉就是——ODP 好用,于是进一步查了点资料,最关键是 ODP.NET 是否稳定,效率如何。总之,ODP 的功能要比 MSDP 更强大。那之后再做项目,就全部改用 ODP.NET。
目录
微软观点
Microsoft .NET Framework 1.1 Data Provider for Oracle(MSDP)与 Oracle Data Provider for .NET(ODP.NET)9i 都很可靠,它们提供类似的功能。用它们中的任何一个开发应用程序,相似之处都大于它们的区别,因为,这两个 DP(Data Prodvider)的相应类具有完全相同的命名和实现.NET框架的接口。然而,它们也有很多重要的不同之处:
在某些情况下,ODP.NET 中的数据类型更好地映射到本地 Oracle 数据类型。除了微软对复杂数据类型提供的方法外,如LOBs、Timestamps、REF CURSORs 和 Oracle XML,ODP.NET 也提供。如果你使用这些数据类型,尽管用微软 DP(Data Provider)也可以完成,但ODP.NET使得软件开发更容易。ODP.NET 也提供微软没有的功能,如 database connections、information messages 和 errordetail、array binding、PL/SQL associative arrays、transaction application failover (TAF)、以及 globalization。
微软 DP 被紧密地集成在 VS IDE 中,这样,你就可以使用代码生成向导来 connections、commands 和 data adapters——ODP.NET 目前不能。微软DP的部署很容易,因为它是 .NET 框架 1.1 或其之后的一部分。微软 DP 支持 Oracle 客户端 8.1.7 或更高版本,而 ODP.NET 要求Oracle 客户端 9.2 或更高版本。
在比较了 MSDP 和 ODP.NET 后,根据应用程序开发和部署的要求,选择正确的 DP。下面超链接是微软提供的这两个 DP 的详细区别。
参考 http://msdn.microsoft.com/en-us/library/ms971518
另外,在下面链接看到,微软已经在.NET框架4.0中 deprecated 它的 DP。请检索 Microsoft Kills Its Oracle Data Provider for ADO.NET 你会发现很多引用。
参考 http://blogs.msdn.com/b/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx
Oracle 观点
那么 Oracle 的观点如何?既然微软在 .NET 框架 4.0 中不赞成 System.Data.OracleClient,也就不用多说了。
参考 http://www.oracle.com/technetwork/topics/dotnet/index-085703.html
参考 http://www.oracle.com/technetwork/topics/dotnet/index-154765.html
总结
ODP.NET 与 MSDP 都可以使用,但是 MS 在 .NET 框架 4.0,也就是 VS 2010,建议开发人员不要使用 MSDP,意味着,微软意识到这种数据库接口是无法与大型数据库生产商竞争的,比如 Oracle,因为实在是赶不上人家的发展,与其这样,不如交给它们,更何况 ODP.NET 在处理复杂数据类型时提供了更多的方法等等。
参考资料
-
Comparing the Microsoft .NET Framework 1.1 Data Provider for Oracle and the Oracle Data Provider for .NEThttp://msdn.microsoft.com/zh-cn/library/ms971518.aspx
- 使用 ODP.NET 访问 Oracle http://www.oracle.com/technetwork/cn/testcontent/o23odp-084525-zhs.html
-
32-bit Oracle Data Access Components (ODAC) with Oracle Developer Tools for Visual Studio