您的位置:首页 > 数据库 > Oracle

C#连接Oracle查询数据乱码问题解决

2014-09-17 17:32 597 查看
由于服务端是第三方系统的,数据库竟然是西欧字符集的,

那边开放了一个用户名,用来查询某个表的数据,

这样服务端与客户端的字符集就不一致了,导致中文乱码。

数据库服务器:AMERICAN_AMERICA.WE8ISO8859P1

客户端操作系统是简体中文

1、用在客户端sqlplus直接连接

C:\Users\Administrator>sqlplus scott/tiger@ORCL

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 9月 17 17:24:43 2014

Copyright (c) 1982, 2010, Oracle. All rights reserved.

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining,

Oracle Database Vault and Real Application Testing options

SQL> select name from tab_test where rownum<3;

NAME

-------------------------------------------------------------------------------

?í?eoé

?ó???·

--直接就是中文乱码

2、通过C#程序采用OleDb的方式查询出来也是乱码

Provider=OraOLEDB.Oracle;Password=tiger;Persist Security Info=True;User ID=scott;Data Source=ORCL;

3、在sqlplus连接之前设置当前回话的环境变量

C:\Users\Administrator>set nls_lang=AMERICAN_AMERICA.WE8ISO8859P1

C:\Users\Administrator>sqlplus scott/tiger@ORCL

SQL*Plus: Release 11.2.0.1.0 Production on Wed Sep 17 17:29:32 2014

Copyright (c) 1982, 2010, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining,

Oracle Database Vault and Real Application Testing options

SQL> select name from tab_test where rownum<3;

NAME

--------------------------------------------------

张三

李四

SQL>

4、在程序种设置环境变量

既然通过设置sqlplus 的环境变量能够解决中文乱码,那么设置程序的环境变量呢?

//环境变量 设置
System.Environment.SetEnvironmentVariable("nls_lang", "AMERICAN_AMERICA.WE8ISO8859P1");
System.Environment.SetEnvironmentVariable("nls_lang", "SIMPLIFIED CHINESE_CHINA.WE8ISO8859P1", EnvironmentVariableTarget.Process);

string sWhere ="select name from tab_test where rownum<3";

DataTable dt = OleDbHelper.ExecuteDataTable(txtConStr.Text.Trim(), CommandType.Text, sWhere);


修改注册表:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session\Manager\Environment

添加:nls_lang=AMERICAN_AMERICA.WE8ISO8859P1

也可以在windows环境变量 设置

set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

set nls_lang=AMERICAN_AMERICA.WE8ISO8859P1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: