64bit系统下兼容oracle32bit问题

※环境

OS:windows server 2008R2 64bit.

开发工具: VS2010 (NetFv4.0)+ C# + NHibernate + OracleClient

Oracle:10.0.2 64bit server +10.0.2 32bit client

 

错误现象

数据库连接失败:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务.

解决方案:

在监听文件中加入下面红字部分:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:\oracle)
      (PROGRAM = extproc)
    )
    (SID_DESC =
    (GLOBAL_DBNAME = ORCL)
    (ORACLE_HOME = D:\oracle)
    (SID_NAME = ORCL)
    )

  )

 

错误现象

C#连接ORACLE 报错“System.Data.OracleClient需有Oracle用户端软体版本8.1.7或以上版本".

解决方案:

权限限制。Oracle安装目录,NETWORK SERVICE用户没有访问权限。

所以只要给Oracle安装目录,设置NETWORK SERVICE的访问权限即可。详细步骤如下:

1. 在 Oracle 安装目录上(如D:\Oracle10\),按鼠标右键,选择 [共享与安全],到 [安全]选项卡。

    添加"NETWORK SERVICE"用户组,权限增加“修改、读取和执行”,如果不够就加上完全控制。

2. 计算机管理--用户和组--在administrator组中加上"NETWORK SERVICE"用户组

一般介绍到此重启机器就可以了,这里涉及一些VS内部使用组件的问题,事实上有些是不行的,还需要配置下oci.dll.

3. 下载“instantclient-basic-win32-10.2.0.4”,解压后放到某个目录下。(如:C:\instantclient-basic-win32-10.2.0.4

4. 把"C:\instantclient-basic-win32-10.2.0.4"加到环境变量PATH中。

5. 设置环境变量:TNS_ADMIN=“tnsnames.ora所在路径”,如果不行就把tnsnames.ora copy到"C:\instantclient-basic-win32-10.2.0.4"目录下。

6. 重启机器,OK。

 

※错误现象

PL SQL DEVELOPER在以上环境中不能用。

解决方案

1. 按照上面3、4、5所述,做好配置。

2. 打开PLSQLDEV,在其“工具”--“首选项”中,把Oracle主目录名设为:C:\instantclient-basic-win32-10.2.0.4

3. 把“OCI库”设为:C:\instantclient-basic-win32-10.2.0.4\OCI.DLL

4. 关闭PLSQLDEV,重启,OK。

 

※错误现象

程序执行报ora-00911错误(无效字符)

解决方案

1. 通常是SQL末尾加了个分号(;)所致。

2. 客户端和服务器端字符集不一致所致。

    SELECT * FROM v$nls_parameters;  或

    select * from nls_database_parameters 或

    select userenv(‘language’) from dual;

    a. 修改客户端字符集(设置环境变量)

        NLS_LANG = AMERICAN_CHINA.ZHS16GBK

    b. 修改客户端字符集(修改注册表)--不建议。

 

附:NLS_LANG 参数组成
NLS_LANG参数由以下部分组成:
NLS_LANG=_.

NLS_LANG各部分含义如下:
LANGUAGE指定:
-Oracle消息使用的语言
-日期中月份和日显示
TERRITORY指定
-货币和数字格式
-地区和计算星期及日期的习惯
CHARACTERSET:
-控制客户端应用程序使用的字符集
通常设置或者等于客户端(如Windows)代码页
或者对于unicode应用设置为UTF8

在Windows上查看当前系统的代码页可以使用chcp命令。

 

你可能感兴趣的:(数据库,C#)