您的位置:首页 > 数据库 > Oracle

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

2014-12-30 22:24 381 查看
托管点击打开链接

全托管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文件里相关命令不同了。





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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: