2023年8月1日发(作者:)

C#连接oracle数据库报错:OCIEnvCreate失败,返回代码为-1,但错误消息⽂本不可⽤原因⼤概是OracleOraDb11g_home1TNSListener服务没启动的原因步骤⼀、停⽌并重新启动OracleOraDb11g_home1TNSListener服务,试⼀下是否可⾏。如在启动此服务出现“本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停⽌。某些服务在未由其它服务或程序使⽤时将⾃动停⽌。” 应该是Oracle的ORACLE_HOME出现问题,打开环境变量,找到系统变量中的ORACLE_HOME,把值改为ORACLE的安装⽬录,如下路径:E:appAdministratorproduct11.2.0dbhome_1再重新启动OracleOraDb11g_home1TNSListener服务,发现可以成功启动。步骤⼆、再次启动C#软件出现了新报错:ORA-12541: TNS: ⽆监听程序解决⽅法:开始-->所有程序-->Oracle OraDb11g_home1--配置和移植⼯具--Net Configuration Assistant,重新配置.如下图。

步骤三、再次启动C#软件发现⼜出现如下报错:ora-12514:TNS:监听服务当前⽆法识别描述中的请求服务

原因:没有注册监听器

解决⽅法:E:appAdministratorproduct11.2.0dbhome_1NETWORKADMIN中的修改如下所⽰:

# Network Configuration File: e:appAdministratorproduct11.2.0dbhome_# Generated by Oracle configuration _LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = CLRExtProc)(ORACLE_HOME = e:appAdministratorproduct11.2.0dbhome_1)(PROGRAM = extproc)(ENVS = "EXTPROC_DLLS=ONLY:e:appAdministratorproduct11.2.0dbhome_")))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))))ADR_BASE_LISTENER = e:appAdministrator再次重启服务,重启C#软件发现已经可以连上ORACLE数据库!步骤四、注意:如果⽤C#写的客户端可以访问ORACLE数据库,但是⽤C#写的webservice却访问不了oracle数据库,并报错:OCIEnvCreate 失败,返回代码为 -1,但错误消息⽂本不可⽤解决⽅法:找到ORACLE的安装⽬录如:app ,右键此⽂件,属性,web共享,此处找到已发布的webservice,并添加共享。(此处操作是以windows server 2003系统做参考的,其他windows系统应该类似吧。)重启电脑,发现调⽤webservice已经可以访问oracle数据库。致此问题解决。

2023年8月1日发(作者:)

C#连接oracle数据库报错:OCIEnvCreate失败,返回代码为-1,但错误消息⽂本不可⽤原因⼤概是OracleOraDb11g_home1TNSListener服务没启动的原因步骤⼀、停⽌并重新启动OracleOraDb11g_home1TNSListener服务,试⼀下是否可⾏。如在启动此服务出现“本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停⽌。某些服务在未由其它服务或程序使⽤时将⾃动停⽌。” 应该是Oracle的ORACLE_HOME出现问题,打开环境变量,找到系统变量中的ORACLE_HOME,把值改为ORACLE的安装⽬录,如下路径:E:appAdministratorproduct11.2.0dbhome_1再重新启动OracleOraDb11g_home1TNSListener服务,发现可以成功启动。步骤⼆、再次启动C#软件出现了新报错:ORA-12541: TNS: ⽆监听程序解决⽅法:开始-->所有程序-->Oracle OraDb11g_home1--配置和移植⼯具--Net Configuration Assistant,重新配置.如下图。

步骤三、再次启动C#软件发现⼜出现如下报错:ora-12514:TNS:监听服务当前⽆法识别描述中的请求服务

原因:没有注册监听器

解决⽅法:E:appAdministratorproduct11.2.0dbhome_1NETWORKADMIN中的修改如下所⽰:

# Network Configuration File: e:appAdministratorproduct11.2.0dbhome_# Generated by Oracle configuration _LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = CLRExtProc)(ORACLE_HOME = e:appAdministratorproduct11.2.0dbhome_1)(PROGRAM = extproc)(ENVS = "EXTPROC_DLLS=ONLY:e:appAdministratorproduct11.2.0dbhome_")))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))))ADR_BASE_LISTENER = e:appAdministrator再次重启服务,重启C#软件发现已经可以连上ORACLE数据库!步骤四、注意:如果⽤C#写的客户端可以访问ORACLE数据库,但是⽤C#写的webservice却访问不了oracle数据库,并报错:OCIEnvCreate 失败,返回代码为 -1,但错误消息⽂本不可⽤解决⽅法:找到ORACLE的安装⽬录如:app ,右键此⽂件,属性,web共享,此处找到已发布的webservice,并添加共享。(此处操作是以windows server 2003系统做参考的,其他windows系统应该类似吧。)重启电脑,发现调⽤webservice已经可以访问oracle数据库。致此问题解决。