.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());

}

}

}

}

}

}

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

  1. asp.net2.0中通过CS代码来动态的指定aspx页面中head中的信息

    在使用asp.net进行web开发的时候页面中的<head></head>中的信息可以通过,asp.net的cs文件动态指定,但是如果很多页面都这样处理的话,就和在aspx代码 ...

  2. java 动态库_java调用dll动态库文件的一般总结

    前一段时间,在项目需求中,需要调用一下第三方的动态库文件,下面是本人一些尝试的经历. 首先需要明白的是,在java中是不能直接调用动态库文件的,因为动态库文件是使用c或是c++编写的,作为一种跨   ...

  3. 在.NET2.0中解析Json和Xml

    在.NET2.0中解析Json和Xml 在.NET解析json有很多方法,这里介绍最简单也用的最多的一种. 一.添加引用 解析Json,先下载开源控件 Newtonsoft.Json.dll 下载地址 ...

  4. 在ASP.Net2.0中使用UrlRewritingNet实现链接重写(转)

    在ASP.Net2.0中使用UrlRewritingNet实现链接重写 很多时候我们需要链接转向(Url Rewriting),例如二级域名转向.文章访问链接等场合. 让我们看两个例子: 1 你现在看 ...

  5. 在ASP.Net2.0中使用UrlRewritingNet实现链接重写

    在ASP.Net2.0中使用UrlRewritingNet实现链接重写 很多时候我们需要链接转向(Url Rewriting),例如二级域名转向.文章访问链接等场合. 让我们看两个例子: 1 你现在看 ...

  6. ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件!

    在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能 ...

  7. 深度解析ASP.NET2.0中的Callback机制

    callback的一般使用方法还算简单,直接参照msdn的帮助和范例就足够了.但是想要真正用好.用精,或者想开发一些基于callback机制的WEB组件,那么,就要先深入了解callback的实现机制 ...

  8. ASP.NET2.0中的全球化与本地化UICulture,Culture

    ASP.NET2.0中的全球化与本地化UICulture,Culture 来源:转载 日期:2007-2-28 14:59:01 阅读:324 评论:0   一.简介 全球化和本地化是每一位开发者在创 ...

  9. .net2.0中SqlBulkCopy批量复制数据出错原因分析!

    在项目后台数据库选择SqlServer,进行批量复制数据时,.net2.0中提供的SqlBulkCopy不失为一个好的选择,性能相当可观;最近亲手实验一把,效果不错,大家可以参见http://www. ...

  10. ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件

    在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能 ...

最新文章

  1. ISLR_Propotion
  2. 编程python爬取网页数据教程_实例讲解Python爬取网页数据
  3. P1119 灾后重建(经典floyd)
  4. 聚类的概念和一般步骤
  5. eclipse 左边目录结构下五referenced library解决办法
  6. 为RedHat系统安装发布版的PostgreSQL数据库
  7. freebsd mysql5.7_FreeBSD 环境下Mysql问题解决方法集锦
  8. 凸优化学习笔记:内点法
  9. safari查看html代码,iPhone不越狱safari查看网页源代码方法
  10. 申报快结束!2022年武汉经开区在孵企业房租申报奖励补贴补助、申报条件材料
  11. 研发团队专业能力提升
  12. python非技术面试题宝典
  13. 临终关怀?抑或一切照旧?PR咋又更新了?
  14. WinForm的控件
  15. 求解n阶方阵零化多项式的mathematica代码
  16. ac自动机 匹配最长前缀_AC自动机算法
  17. Fluent的表达式应用
  18. 解读赛力斯年报:华为智选车的B面
  19. 怎么去掉word文字下面的波浪线
  20. 其实我不仅会 Spring Security,Shiro 也略懂一二!

热门文章

  1. 【2023】上海交通大学计算机考研信息汇总
  2. 原生select下拉框样式修改:去除聚焦的黄色边框样式
  3. matlab二重积分有奇异点,用MATLAB计算某些区域上二重积分.pdf
  4. Android进阶之路(快速进阶第二天)RxAndroid使用
  5. 支付宝芝麻信用分申请
  6. 旧版创维电视怎么投屏?不用数据线就能投屏的方法
  7. VMware打开闪退
  8. 【QT小记】使用QPainter绘制各种基本图形
  9. “向日葵”远程控制软件,方舟Q2硬件付费/免费功能全面评测,拔草向
  10. 视频教程-以太坊区块链实战视频教程(全球同步升级)-区块链