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 在处理复杂数据类型时提供了更多的方法等等。

参考资料


Oracle ODP.NET vs Microsoft MSDP的更多相关文章

  1. Entity Framework 与ORACLE ODP.Net 在vs2010下的稀奇古怪的问题

    不说废话 1.在vs2010数据源中看不到oracle odp.net 数据源,vs2008下可以看到,通过oraprocfg配置多次,重启多次,还是看不到,machine.config里面配置也正常 ...

  2. 使用Oracle ODP.NET 11g的.NET程序发布方法

    使用Oracle ODP.NET 11g的.NET程序发布方法 内容摘要:ODP.NET 11g是Oracle发布的供.NET程序访问Oracle数据库的ADO.NET组件,比微软自带的Oracle组 ...

  3. C# oracle odp.net 32位/64位版本的问题

    问题如下: 系统是win7 64位,技术 asp.net mvc 4, 数据库 oracle 11g. 由于某些原因只能使用 32的 ODP.NET ( Oracle Data Provider ), ...

  4. EF for Oracle,dotConnect for Oracle,ODP.NET

    dotConnect for Oracle dotConnect for Oracle是一款为Microsoft .NET Framework提供直接Oracle数据库连接的数据发生器控件.它完全基于 ...

  5. [转]oracle odp.net 32位/64位版本的问题

    本文转自:http://www.cnblogs.com/yjmyzz/archive/2011/04/19/2020793.html 如果你的机器上安装了odp.net,且确信machine.conf ...

  6. 错误: 未能完成程序集的安装(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 ...

  7. Oracle ODP.NET 篇

    1.C# 使用 System.Data.OracleClient 连接 Oracle 需要安装 instantclient , 并配置相应环境变量.重启,方可使用. 2. 使用 System.Data ...

  8. Oracle ODP.NET连接池

    数据库连接池 连接池是数据库连接的缓存,每当应用程序需要连接数据库时向连接池申请数据库连接,连接池负责具体数据库连接的创建和销毁.连接池中的数据库连接会缓存一段时间,后续的连接请求首先使用缓存中的数据 ...

  9. 无法创建链接服务器 "xxx" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 的实例。 (Microsoft SQL Server,错误: 7302)

    出现这个错误,有两个最常见的两个原因 1.注册表 <1>按下WIN+R,打开“运行”窗口,输入“regedit”,回车 <2>在打开的注册表编辑器的左侧按如下路径依次展开: H ...

随机推荐

  1. Revit API修改链接文件房间边界

    start [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] );//设置房间边界     ...

  2. WCF中修改接口或方法名称而不影响客户端程序

    本篇接着"从Web Service和Remoting Service引出WCF服务"中有关WCF的部分. 运行宿主应用程序. 运行Web客户端中的网页. 输入内容,点击按钮,能获取 ...

  3. poi workbook转成流

    try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); workbook.write(bos); byte[] barray = ...

  4. 查询 EBS 系统物料净重、毛重

    /* Formatted on 2018/3/14 23:40:47 (QP5 v5.256.13226.35538) */ SELECT DISTINCT MSI.SEGMENT1 || ',' 物 ...

  5. python测试开发django-14.查询表结果(超详细)

    前言 django查询数据库的方法很多,不同的方法返回的结果也不太一样,本篇详细讲解关于查询的13个方法 返回对象是对象列表的: all(), filter(), exclude(), order_b ...

  6. Linux学习14-ab报错apr_pollset_poll: The timeout specified has expired (70007)

    前言 使用ab压力测试时候出现报错apr_pollset_poll: The timeout specified has expired (70007),本篇总结了几个ab常见的报错和对应解决办法 当 ...

  7. ios之gcd浅析

    A.普通的GCD异步运行与主线程更新写法: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^ ...

  8. MySQL到Greenplum迁移分析

    MySQL到Greenplum迁移分析 1 数据类型对比   MySQL PostgreSQL comments 数值类型 TINYINT SMALLINT gp中无zerofill属性及unsign ...

  9. C#和java之间的一些差异与共性

    C#与java之间的一些共性和差异整理 隐藏:与java中的重写几乎一致,但是需要添加new关键字让编译器知道,否则会有警告 虚方法:1.声明为virtual的方法就是虚方法,在子类中使用overri ...

  10. [转]mysql 存储过程中使用多游标

    From : http://www.netingcn.com/mysql-procedure-muti-cursor.html mysql的存储过程可以很方便使用游标来实现一些功能,存储过程的写法大致 ...