.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.ManagedDataAccess.Client"
 3、如果对数据类型映射做过配置(Oracle默认的类型映射有点坑爹),需要将下图红线下面的加上去
 

一探究竟

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

分类: Oracle, C#

原文地址:http://www.cnblogs.com/xiaopang2010/p/3382383.html

.NET Oracle Developer的福音——ODP.NET Managed正式推出的更多相关文章

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

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

  2. ODP.NET Managed正式推出

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

  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. ODAC with Oracle Developer Tools for Visual Studio

    c#开发Oracle数据库的时候,需要本机没有安装过 Oracle 客户端,直接下载 ODAC with Oracle Developer Tools for Visual Studio工具安装即可 ...

  8. Oracle Developer Data Modeler项目实践 (转)

    http://www.Oracle.com/webfolder/technetwork/tutorials/obe/db/sqldevdm/r30/datamodel2moddm/datamodel2 ...

  9. Windows 7/Vista下安装Oracle Developer Suit遇到的几个问题

    http://blog.csdn.net/pan_tian/article/details/8016318 Oracle Developer Suite (ODS) 10g是在Windows 7/Vi ...

随机推荐

  1. HIbernate学习笔记4 之 延迟加载和 关联映射

    一.延迟加载 * 在使用hibernate一些方法的查询数据的时候,返回的只是一个空对象(除id外属性都为NULL),并没有真正的查询数据库,而是在使用这个对象时才会触发查询数据库,并将这些数据注入到 ...

  2. LightOJ 1282

    Leading and Trailing Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu S ...

  3. vue css动画

    .toggle-cart-enter-active, .toggle-cart-leave-active { transition: all .3s ease-out; } .toggle-cart- ...

  4. JAVA 语言类的特性(成员、重载、构造方法、静态成员)

    一.类的私有成员和公有成员 1.私有成员 修饰符private    如果在类的声明前加上修饰符private,则无法从该类的外部访问到该类的内部成员,而只能被该类自身访问和修改,而不嗯那个被其他类, ...

  5. pillow实例 | 生成随机验证码

    1 PIL(Python Image Library) PIL是Python进行基本图片处理的package,囊括了诸如图片的剪裁.缩放.写入文字等功能.现在,我便以生成随机验证码为例,讲述PIL的基 ...

  6. 六十 数据库访问 使用SQLAlchemy

    数据库表是一个二维表,包含多行多列.把一个表的内容用Python的数据结构表示出来的话,可以用一个list表示多行,list的每一个元素是tuple,表示一行记录,比如,包含id和name的user表 ...

  7. Ubuntu 18.04安装网易云音乐(转载)

    作为Ubuntu下唯一一款超级好用的音乐软件,必须下载. 提升为root权限后操作 0 : 网易云音乐1.0.0(该版本较为好安装)下载地址 http://s1.music.126.net/downl ...

  8. Linux操作命令(七)

    本次实验将介绍 Linux 命令中 cut.paste 和 tr 命令的用法. cut paste tr 1.cut cut命令是一个将文本按列进行切分的小工具,他可以指定分隔每列的定界符. 如果一行 ...

  9. POJ 1860 Currency Exchange【SPFA判环】

    Several currency exchange points are working in our city. Let us suppose that each point specializes ...

  10. scrapy抓取拉勾网职位信息(四)——对字段进行提取

    上一篇中已经分析了详情页的url规则,并且对items.py文件进行了编写,定义了我们需要提取的字段,本篇将具体的items字段提取出来 这里主要是涉及到选择器的一些用法,如果不是很熟,可以参考:sc ...