今天用C#连接oracle10g的时候,遇到了这个问题。windows2003 PRO R2+oracle 10g
Could not create an environment: OCIEnvCreate returned -1
网上的方法就那几个,试遍了也没用。
1、主要是将oracle主目录oracle\的读写权限赋予asp.net或者是IUSER_..和IWAM_..,重启计算机。
2、打开在IIS中的WEB属性--主目录--执行权限【改为-脚本和可执行文件】;
3、应用程序池【改为-MSSharePointAppPool】,刷新;
4、更改安装目录的属性页安全属性,加入ASPNET,IWAM_机器名,IUSER_机器名三个用户并全部设为完全控制。重启。无效。
5、将上述三个用户均加入administrator组。
但是上述方法宣告失败,而现在看来,出现这个问题主要还是权限和配置。可能由于下载版本问题,10g很多时候默认安装后的配置和环境变量设置不全,上述方式失败可可以尝试如下方法:
1、配置tnsnames.ora。配置方法网上很多。
2、完善环境变量配置。环境变量的配置网上也很多,这里不列举了
3、最重要的一点,注册表加入下面键值
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"LD_LIBRARY_PATH"="F:\*\bin"
"NLS_LANG"="AMERICAN_AMERICA.ZHS16GBK"
"TNS_ADMIN"="F:\*\bin"
具体路径根据实际情况修改。注册表加入下面键值后,重新调试程序,顺利通过。
原因来自:
安装Oracle9i客户端后,使用System.Data.OracleClient访问Oracle数据库如果出现这种错误:
System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.
原因Oracle 9i Release 2 客户端在安装到Windows的NTFS分区下时的安全认证设置不正确,引起本机的Authenticated Users用户无法看到ORACLE_HOME目录下的内容; 这导致在ASP.NET以Authenticated Users权限使用System.Data.OracleClient连接Oracle数据库时报出以上错误。
解决方法:
在oracle/bin目录,加入给以下用户/组,授完全权限:
asp.net machine account
administrator
authenticated users
并且将Asp.net加入到administrator组,再重启IIS
上面这种方法是实践过可行的,
网上还有一种方案,大抵相同,有细小区别,其实不主张将asp.net加入administrator,也不主开开过份大的权限,但下面这种方法,试过似乎不可行:
以Administrator权限登录Windows.
启动Window 资源浏览器找到ORACLE_HOME目录,如C:\Oracle\ora92
右键弹出菜单,选择该目录共享与安全(Win2000下要点击属性)
点击 “安全” 页签
在组和用户名称列表中点击“Authenticated Users” 项.
在该用户的权限列表中,将“读取和运行”的选择框置为不选中状态
再次点击“读取和运行”的选择框,将其设置为选中状态
点击“高级”按钮并在权限项目中确定“Authenticated Users” 是否拥有“读取并运行”权限并应用于“该文件夹,及子文件夹和文件”. 如果不是,双击这样,并确保权限可以“应用于” “该文件夹,及子文件夹和文件”. 该项非常重要你一定要核查.
点击“确定” 按钮
重启动, 以使得所有的修改生效.