C#连接ORACLE问题解决记录(System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本等问题)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011121146/article/details/81626642

    最近需要使用C#连接Oracle进行数据存储,第一次使用C#连接Oracle,网上找了一个ORM,使用的是Dos.ROM,配置起来还算方便,但因为没用过,写配置信息不是很会写,网上搜了一下connectionString的写法,勉强写上了。

    写完以后使用测试程序运行,出现了问题:

System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本

   网上查解决方法,大多都是修改Oracle的目录权限或者安装Oracle客户端,Oracle安装在公司服务器上,修改权限是不可能了,这辈子都不可能了,只能用其他方法,但是也不想安装Oracle客户端,继续搜索解决方案,发现了一个靠谱一点的,跟我们解决Navicat连接Oracle出现的问题差不多,地址在:https://www.cnblogs.com/t1508001/p/5821325.html

   1.首先下载instantclient_11_2,解压到任意目录。

主要是为了使用其中的oci.dll。

2.配置环境变量

    系统变量:在Path中,加入dll的路径;eg:D:\Program Files\PremiumSoft\Navicat Premium 12\instantclient_11_2

    用户变量:加一个ORACLE_HOME,也是这个路径:D:\Program Files\PremiumSoft\Navicat Premium 12\instantclient_11_2;

3.最后一步,重启电脑,这一步很重要,不重启不会生效哦。

 

    重启完后,在执行测试程序,发现不报这个错了,换了一个错误:

System.InvalidOperationException”类型的未经处理的异常在 Dos.ORM.dll 中发生 

其他信息: 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。

    问题比较直观,在32位客户端访问64位Oracle server时出现错误,查看了一下测试程序的生成设置:

首选生成32位的,在目标平台修改为x64,保存并重新运行测试程序,出现了新的问题(郁闷中,继续查询):

System.Data.OracleClient.OracleException”类型的未经处理的异常在 Dos.ORM.dll 中发生 

其他信息: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

百度了一下,中文错误是:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求服务,最后想到,访问Oracle时使用的是SID,不是服务,是不是我connectionString写的不对,继续查询,发现我写的时用服务的方式,改为用SID的方式,完美解决,数据查询出来了。connectionString书写格式可以参考https://www.jb51.net/article/37008.htm

    最后贴出我写的Dos.ORM的数据库连接配置:

<add name="OracleDosConn" providerName="Dos.ORM.Oracle"
      connectionString="Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.8)(PORT = 1521)))(CONNECT_DATA = (SID = ORCL)(SERVER = DEDICATED)));User Id=myDb;Password=password;"/>

 

展开阅读全文

没有更多推荐了,返回首页