odp.net oracle objects for ole,ODP.NET - WEB程序开发 - ITPUB论坛-中国专业的IT技术社区...

由于微软在

1、不在安装客户端也能访问服务器上的oracle(假设Application Server与DB Server 分开)

2、不需要配置TnsNames.Ora文件

当然,我选择odp.net的最主要的原因还是性能。这篇文章列举了两者之间的对比。Technical Comparison: ODP.NET Versus Microsoft OracleClient

下面我将介绍如何在一个在新的项目中使用odp.net。环境配置:A机器,运行C#程序,没有安装oracle

首先要下载odp

下载完成之后不用安装,将Oracle.DataAccess.dll文件从 ODTwithODAC1110720.zip/stage/Components/oracle.ntoledb.odp_net_2/11.1.0.7.10/1/DataFiles/filegroup4.jar文件中解压出来就行,然后复制到项目中,再添加引用Oracle.DataAccess.dll。

编写如下代码:

using Oracle.DataAccess.Client;

string connstring =

“Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1527))” +

“(CONNECT_DATA=(SID=orcl)));User Id=sys;Password=sys;”;//这个也可以放到Web.Config中。

using (OracleConnection conn = new OracleConnection(connstring))

{

conn.Open();

string sql = “select * from users”;

using (OracleCommand comm = new OracleCommand(

代码编写好以后,还要从下载的压缩包中取出几个dll文件。

1、oci.dll (在jar文件里面叫’oci.dll.dbl’,拿出来之后去掉.dbl in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup2.jar)

2、oraociicus11.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.ic/11.1.0.7.0/1/DataFiles/filegroup3.jar)

3、OraOps11w.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.ntoledb.odp_net_2/11.1.0.7.10/1/DataFiles/filegroup3.jar)

4、oraons.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.ons.ic/11.1.0.7.10/1/DataFiles/filegroup1.jar    )

下面这三个有人说需要,有人说不需要,反正也不差这三个,继续吧:

5、orannzsbb11.dll (in ODTwithODAC1110720.zip/stage/Components/oracle.ldap.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup1.jar)

6、oraocci11.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup3.jar)

7、ociw32.dll (在jar文件里面叫’ociw32.dll.dbl’,拿出来之后去掉.dbl in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup2.jar)

最后把这个DLL复制到项目中,CS的要与exe一个文件夹,B/S的有专门的bin目录。

当然,使用一项新技术,必然会遇到一些错误:以下是我遇到的:

1、运行的时候遇到这个异常提示’The provider is not compatible with the version of Oracle client’,不要紧张,检查一下上面所用到的dll是否齐全就OK。

2、“找不到请求的 .Net Framework 数据提供程序。可能没有安装。”这个错误提示是因为在machine.config中找不到Oracle.DataAccess.dll,将下面的代码放到

之间就OK。

注:如果下载的不是ODTwithODAC1110720,有可能dll的位置不像是上面提到的那样,需要自己去挨个找了:(

1:在上面列出的DLL中,其中Oracle.DataAccess.dll和OraOps11w.dll才是ODP

2:各版本的ODTwithODAC包,其DLL位置都不相同,在新版本的包中,上面列出的DLL中,有些DLL已经去掉了(比如orannzsbb11.dll),而且Oracle.DataAccess.dll也根据.net的版本分为多个(以ODTwithODAC112030为例,其中包含2.x和4.0两个版本,分别对应vs2005与2010,开发时需要取用对应的包),使用时注意所取的DLL文件是否正确

3:对于连接字符串,上文中使用的是:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1527))(CONNECT_DATA=(SID=orcl)))

这个是比较典型的tnsname写法,除了这种写法外,ODP

4f06a01a81d5603cca001c0e92e5ebda.gifort][/service_name]

例如,上文中的例子即可写成Data Souce=192.168.0.100:1527/orcl

此外,在这里也同样可以引用tnsnames.ora中配置好的连接(在本机装有Oracle的前提下),有两个方法:直接在程序中设置环境变量TNS_ADMIN,将其指向network/admin,或设置环境变量ORACLE_HOME,程序会自动去 %ORACLE_HOME%/network/admin下查找tnsnames.ora

4:进行

Environment.SetEnvironmentVariable(“ORA_TZFILE”, null);

Environment.SetEnvironmentVariable(“NLS_LANG”, “AMERICAN_AMERICA.AL32UTF8″);

Environment.SetEnvironmentVariable(“NLS_DATE_FORMAT”, “DD-MON-RR”);

Environment.SetEnvironmentVariable(“NLS_TIME_FORMAT”, “HH.MI.SSXFF AM”);

Environment.SetEnvironmentVariable(“NLS_TIMESTAMP_FORMAT”, “DD-MON-RR HH.MI.SSXFF AM”);

Environment.SetEnvironmentVariable(“NLS_TIMESTAMP_TZ_FORMAT”, “DD-MON-RR HH.MI.SSXFF AM TZR”);http://www.th7.cn/db/Oracle/201405/55743.shtml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值