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. AngularJS中module的导入导出

    关于AngularJS中module的导入导出,在Bob告诉我之前还没写过,谢谢Bob在这方面的指导,给到我案例代码. 在AngularJS实际项目中,我们可能需要把针对某个领域的各个方面放在不同的m ...

  2. Unity3D实践系列01,创建项目

    下载并安装Unity5软件客户端. 打开软件,注册Unity帐号,并用注册帐号登录. 点击"创建Project"按钮. 把项目命名为"My First Unity Pro ...

  3. delphi 合并两个 Wav 文件流的函数

    合并两个 Wav 文件的函数 实例一 unit Unit1; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphic ...

  4. Linux安装ImageMagick与JMagick完成过程及配置

    原文地址:http://www.iitshare.com/linux-install-imagemagick-jmagick.html 一.安装背景 最近在服务器上部署了HapiCMS的产品,因为其对 ...

  5. DataGridView设置列标题不换行

    dgv.ColumnHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.False;  //设置列标题不换行 // 设定包括Header和所 ...

  6. .Net Standard 类库的创建和使用

    一..Net Standard类库的创建 1.在当前Vs 2017中创建.Net Standard 类库项目,目前版本默认值 .Net Standard v1.4 二..Net Standard类库的 ...

  7. 【.Net】 C#访问修饰符

    一 类的修饰符:  C#中类的默认修饰符是internal.1 private 只有对包.NET中的应用程序或库才能访问.2 public 不限制对类的访问. 3 protected 只可以被本类和其 ...

  8. TFRecord文件的读写

    前言在跑通了官网的mnist和cifar10数据之后,笔者尝试着制作自己的数据集,并保存,读入,显示. TensorFlow可以支持cifar10的数据格式, 也提供了标准的TFRecord 格式,而 ...

  9. 关于bootstrap Modal弹窗 滚动条的问题

    如果自己通过代码关闭Modal窗体,需要在代码里增加一句代码 $('body').removeClass('modal-open'); 把这个CSS样式移除了

  10. Spring MVC 返回类型为字符串时, 返回中文变成"?"处理

    Spring controller 如下 @Controller public class SimpleController { @ResponseBody @RequestMapping(value ...