Bootstrap

c#程序连接oracle失败问题

1.【需要oracle客户端软件8.1.7或更高版本】使用c#语言,一般通过System.Data.OracleClient类来连接oracle数据库,如果连接远程oracle数据库,但本地未安装oracle客户端(程序没有找到oci.dll文件),连接数据库时,就会出现以下错误:

解决办法:

1)安装与oracle服务端版本匹配的oracle客户端

2)如果不想安装客户端,可以在c#程序目录下放置oci.dll、oraociei11.dll(找到匹配版本的dll)等dll文件

2.【OCIEnvCreate失败,返回代码-1】如果本地已经安装oracle客户端,在连接数据库时报以下错误。往往时,本地安装的oracle客户端低于oracle服务端。如果本地安装的oracle客户端版本与服务端相同,仍然报以下错误,需要检查是否本地安装了多个oracle客户端版本。(检查环境变量Path第一顺位配置的oracle路径是否为高版本)

解决办法:

1)安装与oracle服务端版本匹配的oracle客户端,并在Path中添加oracle客户端目录

2)如果不想安装客户端,可以在c#程序目录下放置oci.dll、oraociei11.dll(找到匹配版本的dll)等dll文件,这样连接数据库时,程序会直接访问此处文件。

3.【ORA-28040: No matching authentication protocol】“没有匹配的验证协议”,出现该错误,是因为oracle客户端版本与服务端版本不匹配。

解决办法:

1)安装与oracle服务端版本匹配的oracle客户端,并在Path中添加oracle客户端目录

2)如果不想安装客户端,可以在c#程序目录下放置oci.dll、oraociei11.dll(找到匹配版本的dll)等dll文件,这样连接数据库时,程序会直接访问此处文件。

4.【尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行】该报错是指,你的程序是32位的,而你访问的数据库是64位的。 

解决办法:

1)目标平台选择X6

2)如果不想更改程序,可以在c#程序目录下放置32位的oci.dll、oraociei11.dll(找到匹配版本的dll)等dll文件,这样连接数据库时,程序会直接访问此处文件。

5.【ORA-12154: TNS: 无法解析指定的连接标识符】出现以下错误是指,程序的数据库连接未找到服务名(如:data source=orl_db;user id=abc;password=abc  则指未找到orl_db)

分析原因:未找到服务名称可能是服务命名中未配置(在Net Manager配置),也可能本地存在多个oracle客户端,程序未访问到指定的oracle客户端。

解决办法:

1)配置数据库连接串时,可以添加上ip地址:data source=orl_db/127.0.0.1;user id=abc;password=abc

2)如果不想修改数据库连接串,则需要检查Net Manager中是否配置了该服务名(也可以在tnsnames.ora文件中查看);还需要检查本地是否存在多个oracle客户端,确定好程序访问的是哪个oracle客户端(在环境变量Path中查找oracle客户端路径),在程序访问的oracle客户端下创建该服务名。