Oracle ODP.NET vs Microsoft MSDP
08年做项目时,用 VS 2005,写据库层还在用 MSDP(System.Data.OracleClient),但是当时由于要操作 XML 和二进制文件,所以又使用了 ODP.NET(Oracle.DataAccess.dll)。那时的第一感觉就是——ODP 好用,于是进一步查了点资料,最关键是 ODP.NET 是否稳定,效率如何。总之,ODP 的功能要比 MSDP 更强大。那之后再做项目,就全部改用 ODP.NET。
本文内容
- Microsoft 观点
- Oracle 观点
- 总结
- 参考资料
微软观点
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 和 error detail、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 .NET http://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 http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
Oracle ODP.NET vs Microsoft MSDP的更多相关文章
- Entity Framework 与ORACLE ODP.Net 在vs2010下的稀奇古怪的问题
不说废话 1.在vs2010数据源中看不到oracle odp.net 数据源,vs2008下可以看到,通过oraprocfg配置多次,重启多次,还是看不到,machine.config里面配置也正常 ...
- 使用Oracle ODP.NET 11g的.NET程序发布方法
使用Oracle ODP.NET 11g的.NET程序发布方法 内容摘要:ODP.NET 11g是Oracle发布的供.NET程序访问Oracle数据库的ADO.NET组件,比微软自带的Oracle组 ...
- C# oracle odp.net 32位/64位版本的问题
问题如下: 系统是win7 64位,技术 asp.net mvc 4, 数据库 oracle 11g. 由于某些原因只能使用 32的 ODP.NET ( Oracle Data Provider ), ...
- EF for Oracle,dotConnect for Oracle,ODP.NET
dotConnect for Oracle dotConnect for Oracle是一款为Microsoft .NET Framework提供直接Oracle数据库连接的数据发生器控件.它完全基于 ...
- [转]oracle odp.net 32位/64位版本的问题
本文转自:http://www.cnblogs.com/yjmyzz/archive/2011/04/19/2020793.html 如果你的机器上安装了odp.net,且确信machine.conf ...
- 错误: 未能完成程序集的安装(hr = 0x8007000b),.net程序关于使用Oracle.DataAccess.dll不同版本x86和x64问题,即oracle odp.net 32位/64位版本的问题
如果你的机器上安装了odp.net,且确信machine.config也有类似以下结节:(64位+.net 4.0环境下,machine.config可能会有4份,分别对应于.net2.0/4.0的3 ...
- Oracle ODP.NET 篇
1.C# 使用 System.Data.OracleClient 连接 Oracle 需要安装 instantclient , 并配置相应环境变量.重启,方可使用. 2. 使用 System.Data ...
- Oracle ODP.NET连接池
数据库连接池 连接池是数据库连接的缓存,每当应用程序需要连接数据库时向连接池申请数据库连接,连接池负责具体数据库连接的创建和销毁.连接池中的数据库连接会缓存一段时间,后续的连接请求首先使用缓存中的数据 ...
- 无法创建链接服务器 "xxx" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 的实例。 (Microsoft SQL Server,错误: 7302)
出现这个错误,有两个最常见的两个原因 1.注册表 <1>按下WIN+R,打开“运行”窗口,输入“regedit”,回车 <2>在打开的注册表编辑器的左侧按如下路径依次展开: H ...
随机推荐
- Revit API修改链接文件房间边界
start [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] );//设置房间边界 ...
- WCF中修改接口或方法名称而不影响客户端程序
本篇接着"从Web Service和Remoting Service引出WCF服务"中有关WCF的部分. 运行宿主应用程序. 运行Web客户端中的网页. 输入内容,点击按钮,能获取 ...
- poi workbook转成流
try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); workbook.write(bos); byte[] barray = ...
- 查询 EBS 系统物料净重、毛重
/* Formatted on 2018/3/14 23:40:47 (QP5 v5.256.13226.35538) */ SELECT DISTINCT MSI.SEGMENT1 || ',' 物 ...
- python测试开发django-14.查询表结果(超详细)
前言 django查询数据库的方法很多,不同的方法返回的结果也不太一样,本篇详细讲解关于查询的13个方法 返回对象是对象列表的: all(), filter(), exclude(), order_b ...
- Linux学习14-ab报错apr_pollset_poll: The timeout specified has expired (70007)
前言 使用ab压力测试时候出现报错apr_pollset_poll: The timeout specified has expired (70007),本篇总结了几个ab常见的报错和对应解决办法 当 ...
- ios之gcd浅析
A.普通的GCD异步运行与主线程更新写法: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^ ...
- MySQL到Greenplum迁移分析
MySQL到Greenplum迁移分析 1 数据类型对比 MySQL PostgreSQL comments 数值类型 TINYINT SMALLINT gp中无zerofill属性及unsign ...
- C#和java之间的一些差异与共性
C#与java之间的一些共性和差异整理 隐藏:与java中的重写几乎一致,但是需要添加new关键字让编译器知道,否则会有警告 虚方法:1.声明为virtual的方法就是虚方法,在子类中使用overri ...
- [转]mysql 存储过程中使用多游标
From : http://www.netingcn.com/mysql-procedure-muti-cursor.html mysql的存储过程可以很方便使用游标来实现一些功能,存储过程的写法大致 ...