oracle的odac dll,.NET2.0中施用最少的ODAC动态库文件连接Oracle数据库

.NET2.0中使用最少的ODAC动态库文件连接Oracle数据库

一直使用.NET+SQLServer做应用系统,没有使用过Oracle。最近,交通部的一个应用系统使用了Oracle11g数据库,而俺的WebService程序必须访问该库。于是在俺的本本上安装了Oracle9i以及Navicat,并使用C# 2005自带的Oracle组件(System.Data.OracleClient)连接并访问了本本上的Oracle库(上网搜索后知道,该组件已经做了废弃标记)。但是,部署这个WebService到IIS服务器上并使用俺的.NET窗体程序访问该WebService时,报错误”System.Exception:

System.Data.OracleClient requires Oracle client software version 8.1.7 or greater”。

在网上搜索找到的原因是:俺的IIS服务器上没有安装Oracle Client。这个客户端有600多M,而俺一向不喜欢安装(setup)组件,更何况是这类大块头东东。于是再google.NET连接Oracle的相关技术文章,找到了ODAC(Oracle Data Access Components),并在官网下载了XCopy的压缩包文件(地址:http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html)(注意是XCopy而不是Setup!)。综合了一些ODAC在.NET下的使用技术介绍,将该包中4个dll文件拷贝到.NET应用程序(如exe或dll或俺的WebService应用的bin)的同文件夹中即可:

oci.dll(XCopy文件中的instantclient_11_2文件夹)

oracle.DataAccess.dll(XCopy文件中的odp.net20/2.x文件夹)

oraociei11.dll(XCopy文件中的instantclient_11_2文件夹)

OraOps11w.dll(XCopy文件中的odp.net20/bin文件夹)

上述解决方案可以连接Oracle9i和Oracle11g,在 编程与部署时还需要注意:

编程时,在项目中必须添加引用 Oracle.DataAccess.ddll

发布时,上述4个dll与应用程序(exe/dll)必须在同一个文件夹中

如果连接时报错误“ORA-12705: Cannot access NLS data files or invalid environmentspecified”,其原因是注册表中的NLS_Lang设置不正确(俺机器安装了Oracle软件,该值设置为N/A)。解决方法有二:

删除注册表HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE下的NLS_LANG键,或者

修改注册表HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE下的NLS_LANG值为simplified chinese_china.zhs16gbk

与安装一个超过600M的Oracle Client方式或直接安装ODAC组件包(即Setup方式)比较,从XCopy文件中提取的4个dll文件即可以满足连接Oracle数据库的需求。当然,如果有多个应用需要连接Oracle库,此时使用ODAC的Setup方式更好,因为不需要多次拷贝4个dll文件。

下面是一个demo的代码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using Oracle.DataAccess.Client;

namespace WindowsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

using (OracleConnection oraConn = new OracleConnection())

{

oraConn.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=csust))); User Id=system; Password=h85040305";

oraConn.Open();

using (OracleCommand oraCmd = new OracleCommand("select * from test1", oraConn))

using (OracleDataReader oraReader = oraCmd.ExecuteReader())

{

while (oraReader.Read() == true)

{

MessageBox.Show((string)oraReader["Name"]);

object name = oraReader["Name"];

object age = oraReader["Age"];

object wage = oraReader["Wage"];

object birthDay = oraReader["BirthDay"];

object xzqhNo = oraReader["XZQHNo"];

MessageBox.Show(xzqhNo.GetType().Name);

MessageBox.Show(name.ToString() + "," + ((decimal)age).ToString("F0") + "," + ((decimal)wage).ToString("F2") + "," + ((DateTime)birthDay).ToString("yyyy-MM-dd HH:mm:ss") + "," + xzqhNo.ToString());

}

}

}

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值