.NET Oracle Developer的福音——ODP.NET Managed正式推出
2013-10-22 14:38
330 查看
在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServer要安装Oracle客户端(XCopy、自己提取相关文件也有一定复杂性),另一方面相比JAVA平台不如JDBC方便快捷,特别是一些刚接触Oracle的小伙伴,面临配置tns.ora、OraHome等等多少有些畏难情绪。
在此下载。对应的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、将驱动对应dbfactory注册以及添加configuration处理器,其实就是在machine.config里增加<sectionname="oracle.manageddataaccess.client"type="OracleInternal.Common.ODPMSectionHandler,Oracle.ManagedDataAccess,Version=4.121.1.0,Culture=neutral,PublicKeyToken=89b483f429c47342"/>和<addname="ODP.NET,ManagedDriver"invariant="Oracle.ManagedDataAccess.Client"description="OracleDataProviderfor.NET,ManagedDriver"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.NETManaged的性能计数器(PerformanceCounter)
3、将Oracle.ManagedDataAccess.dll添加到GAC中
4、提供在VS开发环境下配置节点的智能提示,其实就是将之前提到的Oracle.ManagedDataAccess.Client.Configuration.Section.xsd拷贝到VS对应目录下
5、添加日志记录
6、添加VS开发环境对Oracle.ManagedDataAccess.dll引用的支持
[code]con.ConnectionString="userid=his3;password=his3;datasource=192.168.1.237/ORCL";
[/code]
眼力好的伙伴肯定能马上发现ConnectionString的特殊之处,字符连接串有三种方式:
a、tnsalias:"userid=scott;password=tiger;datasource=sales";在此具体的对应tns文件是可以在config文件中指定,比如我的machine.config给我默认了一个<settingname="tns_admin"value="d:\installsoft\oracle\odp.net_managed121010\odp.net\managed\x64\..\..\..\network\admin"/>
b、ConnectDescriptor:该种方式就是将tns配置的一段拿出来写进去,相比c的有点在于可配置项全面
初始庐山
现在,这一切都即将成为过去啦。继早些时候Oracle官方推出的ODP.NETManaged的Beta版之后,最近的版本已经跟随12c一起发布了,可以一个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、将驱动对应dbfactory注册以及添加configuration处理器,其实就是在machine.config里增加<sectionname="oracle.manageddataaccess.client"type="OracleInternal.Common.ODPMSectionHandler,Oracle.ManagedDataAccess,Version=4.121.1.0,Culture=neutral,PublicKeyToken=89b483f429c47342"/>和<addname="ODP.NET,ManagedDriver"invariant="Oracle.ManagedDataAccess.Client"description="OracleDataProviderfor.NET,ManagedDriver"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.NETManaged的性能计数器(PerformanceCounter)
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差别很小,所不同的就是命名空间换成了usingOracle.ManagedDataAccess.Client;OracleConnectioncon=newOracleConnection();
[code]con.ConnectionString="userid=his3;password=his3;datasource=192.168.1.237/ORCL";
con.Open();
OracleCommandcmd=newOracleCommand();
cmd.CommandType=System.Data.CommandType.Text;
cmd.CommandText="select*fromgy_yonghuxx";
cmd.Connection=con;
OracleDataAdapterda=newOracleDataAdapter();
da.SelectCommand=cmd;
DataSetds=newDataSet();
da.Fill(ds);
con.Close();
da.Dispose();
cmd.Dispose();
con.Dispose();
[/code]
眼力好的伙伴肯定能马上发现ConnectionString的特殊之处,字符连接串有三种方式:
a、tnsalias:"userid=scott;password=tiger;datasource=sales";在此具体的对应tns文件是可以在config文件中指定,比如我的machine.config给我默认了一个<settingname="tns_admin"value="d:\installsoft\oracle\odp.net_managed121010\odp.net\managed\x64\..\..\..\network\admin"/>
b、ConnectDescriptor:该种方式就是将tns配置的一段拿出来写进去,相比c的有点在于可配置项全面
"userid=scott;password=tiger;datasource="+
"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)"+
"(HOST=sales-server)(PORT=1521))(CONNECT_DATA="+
"(SERVICE_NAME=sales.us.acme.com)))"
c、EasyConnectNamingMethod:PROTOCOL等一些选项好像就没地方配置了
"userid=scott;password=tiger;datasource=//sales-server:1521/sales.us.acme.com"
EntityFramework重构
对于已经开始或准备使用EntityFramework的项目(目前版本还不支持CodeFirst),如果熟悉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来的高效。相关文章推荐
- .NET Oracle Developer的福音——ODP.NET Managed正式推出
- .NET Oracle Developer的福音——ODP.NET Managed正式推出
- ODP.NET Managed正式推出
- Oracle Data Provider for .NET, Managed Driver Beta 11.2.0.3.50 .net 的福音
- Oracle:ODP.NET Managed
- IBatisNet+Oracle.ManagedDataAccess打造无需安装oracle客户端和ODP即可连接oracle数据库
- Oracle:ODP.NET Managed 小试牛刀
- Oracle:ODP.NET Managed 小试牛刀 (转)
- Oracle:ODP.NET Managed 数据库连接
- Oracle:ODP.NET Managed 小试牛刀
- oracle odp.net
- (ZT)[Oracle]ASP.NET中使用ODP.NET(ODAC)對含有自定義類型參數的存儲過程進行操作
- [ASP.NET]使用Oracle.ManagedDataAccess的OracleParameter参数化和OracleDataAdapter模糊查询
- ORACLE客户端安装--ODP.NET用于VS2013
- 使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解
- asp.net使用ODP即oracle连接方式的的防注入登录验证程序
- ODT .NET 详解之环境搭配 ----Oracle Developer Tools for Visual Studio .NET
- 面向 Microsoft OracleClient 开发人员的 ODP.NET(资料收集)
- .Net程序员学用Oracle系列(16):访问数据库(ODP.NET)
- oracle ODP.NET 批量插入或更新