c# System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本
前几天遇到了这个问题,情景是与oracle数据库连接的时候出现的。本机已经安装了客户端,使用toad数据库工具能够与数据库相连进行相关的操作。但是在使用代码进行连接的时候出现了这样的问题。找了好久,都没有找到原因,终于是我的一个同事找到了,他直接将代码中的某一段注释掉了,结果程序就能运行了,实在是佩服。但是我们都不太了解其中的原因,所以我决定还是一探究竟。
先在网络上找了好多这个问题的解答,但是都没有能符合我们这个情景的,所以您遇到的问题可能是跟我们遇到的问题是一样的,但又可能是不一样的哟。如果遇到了相同的问题,我很高兴能够帮到您。
好了废话不多说了,先来一解决问题的总结吧。遇到这样的问题您暂时可以这样做,
Environment.SetEnvironmentVariable("PATH",oraclePath,EnvironmentVariableTarget.Process);
4.其他暂时还没有发现
整个问题我的解决方法:如果有什么不对的,请各位一定要指出来,谢谢。
说明:下面的方法是建立在我们知道了应该是下面这个话出现问题的基础上的。
1、问题分析:
在执行Environment.SetEnvironmentVariable("PATH", oraclePath, EnvironmentVariableTarget.Process);这句之前环境变量PATH的值为如下:
C:\oraclexe\app\oracle\product\10.2.0\server\bin;
C:\oracle\product\10.2.0\client_1\bin;
c:\Oracle\Ora81\bin;
C:\Program Files\Oracle\jre\1.1.7\bin;
C:\WINDOWS\system32;
C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\Program Files\Common Files\Autodesk Shared\;
C:\Program Files\Microsoft SQL Server\90\Tools\binn\
执行上面的语句后,环境变量PATH的值就为
E:\words\示例代码\周工作汇报客户DCClient—CS\workCollector\bin\Debug
少了上面所有的值。接着就会出现上面的问题。而将该语句删除就不会出现上面的问题。毫无疑问,就是因为环境变量的设置导致了该问题的发生。
2、原因:
.net连接oracle使用的是oci接口,必须安装oracle客户端,并配置本地网络服务名tnsnames.ora。而我们在安装了客户端后,该软件就会为我们进行相应的配置。而配置的时候就会为我们添加该环境变量。而上面的设置就会导致该程序在运行的时候环境变量的丢失,从而影响到ORACLE客户端的运行。为了验证上面的想法,我进行了实验验证。
3、实验:
环境变量对客户端运行的影响实验
a.首先将计算机中PATH环境变量有关于oracle客户端的注册清除,重启电脑让环境变量生效。
b.运行将上面环境变量设置注释掉的程序,本该运行正确的程序出现了与之前相同的错误。
c.然后我将关于的oracle客户端的环境变量path以字符串的形式加入到当前的可执行路径中,通过上面的设置环境变量的语句进行设定。
d.再次运行该程序,程序正常运行。
实验分析:说明环境变量的设置是导致该错误的原因
4、对程序写此语句的目的进行分析:可能的目的是为了使当前程序的运行受操作系统的完全控制,加入到当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程(百度上说的)。
5、解决方法:
一是保留当前程序的完整路径,二是不用保留。
第一种:
a.通过配置进行添加,即将当前程序运行得完整路径添加到环境变量中
b.通过程序进行添加
1、取出当前程序运行的完整路径:
string oraclePath =
System.Windows.Forms.Application.StartupPath
2、取出当前的环境变量(PATH):
string str = Environment.GetEnvironmentVariable("PATH");
3、通过字符串连接,将该环境变量进行重新设置:Environment.SetEnvironmentVariable("PATH",
oraclePath+";"+ str , EnvironmentVariableTarget.Process);
第二种:直接不将该程序运行的完整路径添加到环境变量path中,也就是添加该程序的课搜索路径。
6、总结
将程序的可执行的完整路径添加到环境变量path中可以增加程序运行得稳定,特别是在生产release版本的时候,就可以防止出现找不到可执行文件的错误,毕竟计算机有时还是会出错,这只是一个双保险的感觉。
好了,基本上我就是这样做的,如果有更好的,我们可以一起讨论,一起学习。
c# System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本的更多相关文章
- System.Data.Oracleclient需要Oracle客户端软件Version8.1.7或更高版本问题
C#连接ORACLE报System.Data.Oracleclient需要Oracle客户端软件Version8.1.7或更高版本问题: 开始Webservice在32位系统ORACLE10g库中we ...
- oracleclient连oracle库 报System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
在iis下发布eworkflow+eform+ebiao的代码,访问oracle的数据库,用oracleClient或者oledb的方式连接,有时会报“System.Data.OracleClient ...
- 关于IIS部署时出现“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”的问题解决摘要
系统环境:windows2008 X64 IIS版本:iis7 oracle客户端版本:11g,另外装了32位的客户端. 网站.net framework版本: 4.0 目前状况,IIS可以正常运行, ...
- “System.Exception: System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本” 的解决方案
在项目部署过程中ORACLE客户端多次会遇"System.Exception: System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本&qu ...
- System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
问题描述: c#程序本机运行没有问题,部署到正式环境后报错: System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本 思考: 难道真是客户端的问题吗? ...
- Reporting Services无法连接ORACLE,提示:System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
Reporting Services无法连接ORACLE,在服务器安装ORACLE 11客户端版本后仍然提示以下错误: System.Data.OracleClient 需要 Oracle 客户端软件 ...
- 解决“System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本”
问题描述:远程访问该数据库(客户端同样是Oracle11g)提示“System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本”. 解决的办法: 1.一定要关闭Win ...
- System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本问题
出错的原因: 1.虽然报的是需要安装客户端8.1.7及以上版本,实际是由于.NET账户没有访问Oracle\bin文件夹的权限 2.在 Windows Server 2003/2008 或Window ...
- asp.net 连接oracle,报错误“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
1.http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 下载对用版本的Instan ...
随机推荐
- 结合个人经历总结的前端入门方法 (转自https://github.com/qiu-deqing/FE-learning)
结合个人经历总结的前端入门方法 (https://github.com/qiu-deqing/FE-learning),里面有很详细的介绍. 之前一直想学习前端的,都不知道怎么下手都一年了啥也没学到, ...
- H5 学习笔记(一、关于position定位)
主要是relative与absolute的用法: 1.relative 依据left right top bottom 等属性在正常文档流中脱离位置,即相对于他的正常文档流位置进行移动.两个都为rel ...
- Web之路笔记之三 - 使用Floating实现双栏样式
2014秋季学期Web2.0课程实验 <Lab2 - Journal> 1. 对CSS的BOX MODEL进行亲密接触,理解他的用途. 2. 在float图片的时候,发现此时图片脱离了原来 ...
- Const关键字
const const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程 ...
- Android开发--TableLayout的应用
1.简介 TableLayout为表格框架结构
- Mysql主数据库+备份数据库部署教程
转:http://www.111cn.net/database/mysql/76450.htm 本文我们来讲讲Mysql主备如何部署,这里说的主是指Mysql主数据库,备是从数据库,备可以是多个,也可 ...
- [转载]tslib1.4与Qt4.8.6的交叉编译与移植
原文:http://www.cnblogs.com/Jasonsblog/p/3757985.html http://blog.csdn.net/sno_guo/article/details/168 ...
- 使用nodejs调用微信发送红包
前置条件:申请微信发送红包的账户及其权限 依赖 blueimg-md5和 xmlreader 库 /common/weixin.js 源码 /** * Created by chent696 on 2 ...
- JS-DOM基础
1 JS-DOM 全称:document object model 1.1 获取页面元素 getElementsByTagName():无论元素的数量是多少,都会存入数组 getElement ...
- php的clone 浅拷贝
总所周知 php 的 clone方法 拷贝一个对象 而且还是所谓的浅拷贝 一时迷茫 今天终于整明白了 <?php class a { pulic $data; function __constr ...