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

来源:互联网 发布:汉字教学软件 编辑:程序博客网 时间:2024/05/18 03:45

托管点击打开链接

全托管oracle驱动,时间大概是2013年初。不再需要安装Oracle客户端,只用一个Oracle.ManagedDataAccess

.dll就ok,而且部分32还是64位。避免问题:在生产环境下的服务器要装一个客户端有时候是挺费周折的,有可能操作系统有这样那样的问题,另外机器上可能已经装好了好几个版本的oracle client,装上去可能影响在用在业务系统。

先把论坛中有人提的问题列一下:

1、因为不需要安装客户端了,所以即使以前装了客户端的话其中的TNS配置也跟当前托管程序集没任何关系了(ORACE_HOME什么的也自然没关系),tns那个文件路径就需要指定了,比如我的machine.config就如下制定了(其实就是安装目录所在那个tns文件),当然你也可以在当前app.config指定
<setting name="tns_admin" value="d:\installsoft\oracle\odp.net_managed121010\odp.net\managed\x64\..\..\..\network\admin" />
在有多个程序都使用同一个数据库地址的时候,使用tns还是很有意义的,这样就能做到整体切换而不用每个去修改,同时也方便管理

2、这些驱动只能用在03以上的系统,.net Framework的版本要在4.0以上,oracle数据库在要10.2版本以上,10.1都不行。

这次是随Oracle ODAC 12c 发布包中包含的oracle全托管驱动,之前Oracle已经发布了两个Beta版本的全托管驱动,但在测试中确实也发现了一些问题,这次发布的12.1.0.1.0 貌似已经是Release正式版了,经过简单的测试,上一个版本我所碰到的Bug已经被修复,目前未发现有什么新的问题,推荐大家使用。

全托管最大的特点:托管代码公共语言运行库(CLR)中运行。而不需要额外的客户端进程负责维护。

字符连接串有三种方式 :

  a、tns 别名:"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"

方法一:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Oracle.ManagedDataAccess.Client;using Oracle.ManagedDataAccess.Types; namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            string strConn = "User Id=test;password=test;" +                             "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.120.1)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));" +                             "Pooling=false;";             using (OracleConnection con = new OracleConnection(strConn))            {                con.Open();                 string strSQL = "select * from USERS order by ID";                 OracleCommand cmd = new OracleCommand(strSQL, con);                 OracleDataReader reader = cmd.ExecuteReader();                 while (reader.Read())                {                    string line = "";                    for (int i = 0; i < reader.FieldCount; i++)                    {                        line += reader.GetName(i).ToString() + "=" + reader.GetValue(i).ToString() + " ";                    }                    Console.WriteLine(line);                }            }             Console.ReadLine();        }    }}

方法二

修改连接字符串

 string strConn = "User Id=test;password=test;" +                             "Data Source=192.168.120.1:1521/orcl;" +                             "Pooling=false;";

方法三:

在下载的Oracle.ManagedDataAccess压缩包中,\network\admin\sample目录下有一个tnsnames.ora的文件,修改此文件配置数据库的监听信息,将该文件拷贝到应用程序根目录下。

核心的dll,就是common目录下的Oracle.ManagedDataAccess.dll,不象ODP.NET以前的版本,这次终于不用区分x86/x64版本了,不管是32位还是64位,都是同一个dll。

至于manged/x64、managed/x86这二个目录,是用来向.NET x86或.NET x64的GAC注册程序集的,运行相关的configure.bat后,会自动将common中的Oracle.ManagedDataAccess.dll放入GAC,这样在vs中添加引用时,能自动找到GAC中的相关命名空间

注意因为是全托管,所以并不会去找oci.dll,也不会找注册表中的监听程序,这就要求必须自己配置ora并指定ora文件路径。


string strConn = "User Id=test;password=test;" +                             "Data Source=test;" +                             "Pooling=false;";

下载后解压所可以看到。

一个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文件里相关命令不同了。

image

如果你对之前的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引用的支持

image

0 0
原创粉丝点击