C#连接ORACLE出现乱码问题的解决方法

目录
  • 方法一
  • 方法二
  • 方法三
  • 方法四

以前做过java项目,连接各种数据库都得心应手,最近接触c#的一个项目,连接SqlServer数据库倒也是很好用,但是遇到oracle数据库就萎了,于是搜索好多资料,有使用oracle.datamanager.dataaccess的,有System.Data.OracleClient.OracleConnection的,也有System.Data.OleDb.OdbcConnection连接的,但前两种方式都试了,依旧如此乱码,于是就试试最后一种:

方法一

连接字符串:

"Provider=oraoledb.oracle;Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.10.10)(PORT = 1521)))(CONNECT_DATA = (SID = orcl))) ;User Id=user;Password=user"

报错:未注册数据提供程序!

于是继续搜索,网上说需要安装oracle相关连接组件,这就很麻烦了,不可能所有机子都安装这个组件

于是继续找解决方法,最后发现以下连接是可以的,也就是在使用System.Data.OracleClient.OracleConnection时候,不再提示注册程序之类的, 问题终于解决了,查询结果也不乱码!

连接字符串:

"Provider=MSDAORA.1;Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =
10.20.10.10
)(PORT = 1521)))(CONNECT_DATA = (SID = orcl))) ;User Id=lswen;Password=1169"

注意:Provider=MSDAORA.1; 而不是Provider=oraoledb.oracle;

方法二

1.打开注册表:开始-运行-regedit

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb11g_home1/OLEDB
在右侧点鼠标右键--新建--字符串值--名称改为:NLS_LANG 值设为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

2.我的电脑-属性-高级系统设置-环境变量-在系统变量下方点击新建--变量名:NLS_LANG 变量值: SIMPLIFIED CHINESE_CHINA.ZHS16GBK

方法三

make1828同学给出的解决方法

1:先查询oralce的字符编码:select userenv('language') from dual;

2:在环境变量中设置NLS_LANG变量:

3:配置连接字符串:

Provider=OraOLEDB.Oracle;User ID=***;Password=***;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = ***)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))

4:安装Oracle客户端:(可自行网上搜索下载)

5:需要的可用下载一个PLSQL工具

可以到我们下载即可 https://www.jb51.net/softs/664139.html

方法四

最近我用程序读取oracle数据库中数据时发现中文全部是乱码。于是我展开了一系列的办法最终解决了此问题。

工作环境:服务器 windows 2003+ oracle。
服务器字符集 SIMPLIFIED CHINESE_CHINA.WE8DEC。
编程环境 VS2005,C#,PLSQL。

方案一:

利用System.Data.OracleClient.OracleConnection类访问数据库。

连接字符串:

"Data Source= (DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.0.5)(PORT = 1521)))(CONNECT_DATA = (SID = DEV))) ;User Id=lswen;Password=1169"

将本地字符集改为与服务器相同。

打开注册表regdit:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEO 中NLS_LANG改为: SIMPLIFIED CHINESE_CHINA.WE8DEC。

这个方法简直就像噩梦,根本解决不了,网上有很多人发表用这种方法。答案是片面的,如果服务器的字符集是: ZHS16GBK那么此法就可以解决。字符集WE8DEC是西欧字符集本身包含的汉字就不多,之所以它允许用存入汉字是因为它将一个汉字拆分为两个字节存储方式,其他中文字符集的客户端无法直接还原为一个中文。所以必须保持客户端与服务器一致-----这网上看到的不知道自己的理解是否对。

方案一 失败。

方案二 :

利用System.Data.OleDb.OdbcConnection类访问数据库。

连接字符串:

"Provider=MSDAORA.1;Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.0.5)(PORT = 1521)))(CONNECT_DATA = (SID = DEV))) ;User Id=lswen;Password=1169"

将本地字符集改为与服务器相同,方法同方案一相同。
这一下问题终于解决了。

强调连接字符串因该使用Provider=MSDAORA.1; 不能使用Provider=oraoledb.oracle;

方案二 成功了。

总结 :

不管是WE8DEC,还是其他一些西欧字符集都存在这样的问题,用第二种方案应该都可以解决。

(0)

相关推荐

  • C#连接ORACLE出现乱码问题的解决方法

    目录 方法一 方法二 方法三 方法四 以前做过java项目,连接各种数据库都得心应手,最近接触c#的一个项目,连接SqlServer数据库倒也是很好用,但是遇到oracle数据库就萎了,于是搜索好多资料,有使用oracle.datamanager.dataaccess的,有System.Data.OracleClient.OracleConnection的,也有System.Data.OleDb.OdbcConnection连接的,但前两种方式都试了,依旧如此乱码,于是就试试最后一种: 方法一

  • php pdo oracle中文乱码的快速解决方法

    在/etc/profile.d/简历oracle.sh 内容如下在NLS_LANG设置编码 ORACLE_HOME=/usr/lib/oracle/12.1/client64 C_INCLUDE_PATH=/usr/include/oracle/12.1/client64 LD_LIBRARY_PATH=$ORACLE_HOME/lib #remember this is the client NLS_LANG not the server one NLS_LANG=FRENCH_FRANCE.

  • 关于Linux操作系统下终端乱码的完美解决方法

    初入linux的程序员们,经常会受到乱码的问候.可谓"始乱终弃".因为乱码,并且最终放弃了linux的不在少数.好吧,言归正传,先看看各类乱码是怎么形成的. 中文字符乱码 这种情况一般是安装了中文控制端,但没有启用中文应用造成的.只需要启动相应软件即可,如zhcon.或者是启用了相应软件,但字符集不对,需设置相应字符集,例如export LANG=zh_CN.UTF-8 ORACLE安装界面乱码 虽说ORACLE支持多国语言,会根据环境变量自动选择字符集,但中文安装好像还有问题,不过1

  • Mysql5.5安装配置方法及中文乱码的快速解决方法

    1.启动服务 windows下DOS命令窗口输入指令: 查看服务是否启动:net help services 启动mysql服务:net start mysql 停止mysql服务:net stop mysql linux下在bash下,输入指令: 查看服务状态:service mysqld status 启动mysql服务:service mysqld start 停止mysql服务:service mysqld stop 2.登陆 mysql -u[这里输入用户名] -p[这里输密码] 3.

  • linux下因为系统编码问题造成乱码的快速解决方法

    最近一段时间遇到一些润乾的应用在linux系统下面乱码的问题,最后检查后都发现是客户的linux系统默认编码设置的不正确造成的,这种原因造成乱码的现象一般都是程序里面写死了的中文字符能正常展现,但是从数据库中取出来的或者从程序中读出来的中文字符就会出现乱码. 下面就介绍一下由于linux系统编码设置不正确造成润乾报表应用乱码问题的解决办法. 第一步:检查linux的系统编码. 检查linux的系统编码,确定系统是否支持中文.在linux系统的终端中输入命令:locale,就会看到打印出的系统编码

  • java实现PPT转PDF出现中文乱码问题的解决方法

    ppt转成pdf,原理是ppt转成图片,再用图片生产pdf,过程有个问题,不管是ppt还是pptx,都遇到中文乱码,编程方框的问题,其中ppt后缀网上随便找就有解决方案,就是设置字体为统一字体,pptx如果页面是一种中文字体不会有问题,如果一个页面有微软雅黑和宋体,就会导致部分中文方框,怀疑是poi处理的时候,只读取第一种字体,所以导致多个中文字体乱码. 百度和谷歌都找了很久,有看到说apache官网有人说是bug,但他们回复说是字体问题,这个问题其实我觉得poi可能可以自己做,读取原来字体设置

  • Oracle安装监听器错误的解决方法

    小白在搭载环境时,经常遇到的一个问题就是数据库安装错误,其中Oracle监听器的错误是经常出现的一个错误,搞不好还要重装系统.下面我就总结一下解决监听器配置问题的三个方法. 一.删除监听器重新配置 在cmd命令栏,sercices.msc查看服务,找到Oracle监听器,停止运行.找到配置和移植工具下的Net Configuration Assistant进行简单的删除再重新建一个即可,直接点击下一步(ps重新配置完成后需重启电脑). 二.重新配置IP地址 如果在服务中Oracle监听器已经打开

  • 读写json中文ASCII乱码问题的解决方法

    今天要帮前端写一个小后台,就是读取数据然后转成json送给他,让他去展示.数据很简单,但是处理的时候遇到了一个问题,文件中涉及到了中文的处理,每次处理完写的json格式就是ASCII码,完全没办法用.代码如下: # -*- coding: utf-8 -*- import json import codecs f = codecs.open('data.txt', 'r', 'utf-8') content = json.load(f) print content[0]['id'] jsdata

  • PHP读MYSQL中文乱码的快速解决方法

    打算切换某个网站的主机,没想到遇到Php和Mysql中文乱码的问题. 以前的国外主机用的Mysql是4.x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,没想到新的主机的Mysql是5.0版本的,导入数据后,用Php读出来全是问号,乱码一片,记得我以前也曾经有过一次切换出现乱码的经验,原因肯定是Mysql版本之间的差异问题. 只好查资料,发现了一个解决方法,就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用

  • Android编程向服务器发送请求时出现中文乱码问题的解决方法

    本文实例讲述了Android编程向服务器发送请求时出现中文乱码问题的解决方法.分享给大家供大家参考,具体如下: 我们在andorid项目中通过get方式向服务器发送请求,其中url参数带有中文,将会产生乱码,乱码产生的原因有两种: 1. 在提交参数时,没有对中文参数进行URL编码 2. Tomcat服务器默认采用的是IOS8859-1编码(不支持中文)得到参数值 解决: 1. 进入android项目,在其中要提交参数的时候,对参数的值进行编码: 复制代码 代码如下: URLEncoder.enc

随机推荐