NET Oracle Developer的福音——ODP.NET Managed正式推出

在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServer要安装Oracle客户端(XCopy、自己提取相关文件也有一定复杂性),另一方面相比JAVA平台不如JDBC方便快捷,特别是一些刚接触Oracle的小伙伴,面临配置tns.ora、OraHome等等多少有些畏难情绪。

初始庐山

现在,这一切都即将成为过去啦。继早些时候Oracle官方推出的ODP.NET Managed的Beta版之后,最近的版本已经跟随12c一起发布了,可以在此下载。对应的12c文档粗看一下,下载了64bit的版本,下载完成后文件不多。

一个readme.htm中只寥寥数语,熟悉的network文件夹相当于与一个tnsnames和sqlnet的模板,managed里也提供里一个文档,里面描述也很少,主要介绍一些配置和BUG情况,核心就在common里面的Oracle.ManagedDataAccess.dll这个文件了,Oracle.ManagedDataAccess.Client.Configuration.Section.xsd这个文件一看就知道是提供给vs的xml编辑器提供智能提示的,接着里面还区分了X64和X86的文件夹,一方便主要是分布式事务的Oracle.ManagedDataAccessDTC.dll不同,另一个就是bat文件里相关命令不同了。

如果你对之前的ODP.NET的OraProvCfg已经比较熟悉的话,那么configure.bat里面的内容就很好理解了,这个批处理一共干了这么几件事情,其中2、4、5其实并不是必须的:

1、将驱动对应db factory注册以及添加configuration处理器,其实就是在machine.config里增加<section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />和<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />,这样在接下来的开发和部署中才能识别Oracle.ManagedDataAccess.Client的驱动以及oracle.manageddataaccess.client的配置节点(其实如果在单独的程序配置也是可以的,需要注意的是是否使用gac)

2、添加ODP.NET Managed的性能计数器(Performance Counter)

3、将Oracle.ManagedDataAccess.dll添加到GAC中

4、提供在VS开发环境下配置节点的智能提示,其实就是将之前提到的Oracle.ManagedDataAccess.Client.Configuration.Section.xsd拷贝到VS对应目录下

5、添加日志记录

6、添加VS开发环境对Oracle.ManagedDataAccess.dll引用的支持

牛刀小试

VS新建一个项目,引用Oracle.ManagedDataAccess.dll,开始随意码几行烂熟的入门级代码…,可以看到,正如Orale自己描述的,跟以前的API差别很小,所不同的就是命名空间换成了using Oracle.ManagedDataAccess.Client;

   1:              OracleConnection con = new OracleConnection();
   2:              con.ConnectionString = "user id=his3;password=his3;data source=192.168.1.237/ORCL";
   3:              con.Open();
   4:   
   5:              OracleCommand cmd = new OracleCommand();
   6:              cmd.CommandType = System.Data.CommandType.Text;
   7:              cmd.CommandText = "select * from gy_yonghuxx";
   8:              cmd.Connection = con;
   9:   
  10:              OracleDataAdapter da = new OracleDataAdapter();
  11:              da.SelectCommand = cmd;
  12:              DataSet ds = new DataSet();
  13:              da.Fill(ds);
  14:   
  15:              con.Close();
  16:              da.Dispose();
  17:              cmd.Dispose();
  18:              con.Dispose();

眼力好的伙伴肯定能马上发现ConnectionString的特殊之处,字符连接串有三种方式 :

a、tns alias:"user id=scott;password=tiger;data source=sales";在此具体的对应tns文件是可以在config文件中指定,比如我的machine.config给我默认了一个<setting name="tns_admin" value="d:\installsoft\oracle\odp.net_managed121010\odp.net\managed\x64\..\..\..\network\admin" />

b、Connect Descriptor:该种方式就是将tns配置的一段拿出来写进去,相比c的有点在于可配置项全面

  "user id=scott;password=tiger;data source=" +
"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)" +
"(HOST=sales-server)(PORT=1521))(CONNECT_DATA="+
"(SERVICE_NAME=sales.us.acme.com)))"
 c、Easy Connect Naming Method:PROTOCOL等一些选项好像就没地方配置了
  "user id=scott;password=tiger;data source=//sales-server:1521/sales.us.acme.com"
 

Entity Framework重构

   对于已经开始或准备使用Entity Framework的项目(目前版本还不支持Code First),如果熟悉ADO.NET替换起来其实也很简单,共有三点需要注意
 1、配置文件里的连接字符串中provider=Oracle.DataAccess.Client;替换为provider=Oracle.ManagedDataAccess.Client;provider
 2、对应实体文件edmx中的Provider="Oracle.DataAccess.Client"也替换为Provider="Oracle.DataAccess.Client"
 3、如果对数据类型映射做过配置(Oracle默认的类型映射有点坑爹),需要将下图红线下面的加上去
 

一探究竟

性能测试我想正式版发布前Oracle官方肯定做过的,自己做测试对比毕竟不够专业,但粗略看下内部实现多少能看出端倪的,如果看过以前Oracle驱动的dll(Mircrosoft、Oracle、Devert提供的dll)肯定知道以前都是依赖于oci.dll这个接口,调用的最终实现是通过P\Invoke。下图是顺着OracleConnect.Open最后跟踪到的OracleCommunication的类,在此已经出现了soket、socketStream等对象,可见这次的托管版本托管的还是比较彻底的,个人觉得在性能上应该会比P\Invoke来的高效。

分类: OracleC#

ODP.NET Managed正式推出的更多相关文章

  1. .NET Oracle Developer的福音——ODP.NET Managed正式推出

    .NET Oracle Developer的福音--ODP.NET Managed正式推出   在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServ ...

  2. .NET Oracle Developer的福音——ODP.NET Managed正式推出

    在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServer要安装Oracle客户端(XCopy.自己提取相关文件也有一定复杂性),另一方面相比JAVA ...

  3. PetaPoco利用ODP.NET Managed Driver连接Oracle

    大概几年之前用PetaPoco做过一个Oracle的项目,开发的时候还需要安装oracle的client,非常麻烦.调试好环境后,一直到项目结束都不敢重装系统.最近又有一个需求需要读取oracle,可 ...

  4. Oracle:ODP.NET Managed 小试牛刀

    “ODP.NET Managed”发布已经有一段时间了,近期正好有一个新项目,想尝试用一下,参考园子里的文章:<.NET Oracle Developer的福音——ODP.NET Managed ...

  5. ODP.NET Managed 相关文章收集

      一.Oracle 对.net支持的一些基础知识了解介绍. 1.早年的时候,微软自己做的有 System.Data.OracleClient. 现在已经成了过期类了.性能等都不是很好. 2.Orac ...

  6. Mybatis.Net 整合 ODP.NET Managed

    初步接触MyBatis.Net的朋友,请先移步 MyBatis.Net 学习手记 1. 项目中先添加Oracle.ManagedDataAccess.dll程序集引用 2. MyBatis.Net 中 ...

  7. 移动终于hold不住了 联合微信正式推出流量红包业务

    微信的迅猛发展终于让中移动hold不住了,今日移动广东分公司联合微信正式推出流量红包业务,流量红包分为1元10M(10个整售).3元50M(5个整售)两种.广东的微信朋友有福了,赶紧去抢红包吧!微信& ...

  8. 宣布在 Azure 镜像库中正式推出 Windows Server 2012 R2 并降低 Windows Azure 的实例定价

    我们今天将宣布两条消息,为使用基础结构服务的客户提供更多选择和成本节约:在镜像库中推出 Windows Server 2012 R2 以及降低 Memory Intensive 计算实例定价. 虚拟机 ...

  9. 阿里云DataWorks正式推出Stream Studio:为用户提供大数据实时计算的数据中台

    5月15日 阿里云DataWorks正式推出Stream Studio,正式为用户提供大数据的实时计算能力,同时标志着DataWorks成为离线.实时双计算领域的数据中台. 据介绍,Stream St ...

随机推荐

  1. List之Distinct()

    针对数组可以用List.Distinct(),可以过滤掉重复的内容. 针对对象中的某个字段只能用Distinct(IEqualityComparer<T>) 用法:  1  public  ...

  2. 【iOS开发-48】九宫格布局案例:自己主动布局、字典转模型运用、id和instancetype差别、xib反复视图运用及与nib关系

    本次九宫格案例: (1)导入app.plist和各种图片素材,方便兴许开发.实际开发中,也是如此. (2)把plist中数组导入进来. --由于本案例中app.plist终于是一个数组,数组里面是字典 ...

  3. c#之函数创建和闭包

    c#之函数创建和闭包 阅读目录: 动态创建函数 匿名函数不足之处 理解c#中的闭包 闭包的优点 动态创建函数 大多数同学,都或多或少的使用过.回顾下c#中动态创建函数的进化: C# 1.0中: pub ...

  4. java23种设计模式详解(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  5. 什么是EF, 和 Entity Framework Demo简单构建一个良好的发展环境

     Entity Framwork(实体框架.缩写EF)这是ORM(Object Relational Mapping.对象映射关系)一个解决方案. EF的表映射为实体.并封装了操作方法.方便开发者 ...

  6. XAMPP on Mac 组态 Virual Host

    首先,在hosts文件中添加virtual host域名.方向127.0.0.1 我一般使用的命名约定dev-domainname.com sudo nano /private/etc/hosts # ...

  7. angular.js的一点理解

    对angular.js的一点理解 2015-01-14 13:18 by MrGeorgeZhao, 317 阅读, 4 评论, 收藏, 编辑 最近一直在学习angular.js.不得不说和jquer ...

  8. Javascript轮播 支持平滑和渐隐两种效果

    Javascript轮播 支持平滑和渐隐两种效果 先上两种轮播效果:渐隐和移动   效果一:渐隐 1 2 3 4 效果二:移动 1 2 3 4 接下来,我们来大致说下整个轮播的思路: 一.先来看简单的 ...

  9. CSS学习笔记:溢出文本省略(text-overflow)

    原文:CSS学习笔记:溢出文本省略(text-overflow) 在CSS3中,text-overflow属性的基本语法如下: clip:表示不显示省略文本,简单的裁切. ellipsis:表示对象文 ...

  10. mysql设置root的密码

    mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');