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


Posted in Oracle onOctober 05, 2021

以前做过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;

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

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

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

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客户端:(可自行网上搜索下载)

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

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

可以到三水点靠木下载即可 https://www.3water.com/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,还是其他一些西欧字符集都存在这样的问题,用第二种方案应该都可以解决。

Oracle 相关文章推荐
Oracle 区块链表创建过程详解
May 15 Oracle
使用Navicat Premium工具将oracle数据库迁移到MySQL
May 27 Oracle
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
Jun 04 Oracle
C#连接ORACLE出现乱码问题的解决方法
Oct 05 Oracle
Oracle中update和select 关联操作
Jan 18 Oracle
oracle删除超过N天数据脚本的方法
Feb 28 Oracle
Oracle 多表查询基本语法实例
Apr 18 Oracle
Oracle使用别名的好处
Apr 19 Oracle
Oracle锁表解决方法的详细记录
Jun 05 Oracle
ORACLE中dbms_output.put_line输出问题的解决过程
Jun 28 Oracle
Oracle 临时表空间SQL语句的实现
Sep 25 #Oracle
oracle索引总结
Sep 25 #Oracle
Oracle 死锁的检测查询及处理
Sep 25 #Oracle
RPM包方式安装Oracle21c的方法详解
oracle连接ODBC sqlserver数据源的详细步骤
Oracle以逗号分隔的字符串拆分为多行数据实例详解
快速学习Oracle触发器和游标
You might like
星际实力自我测试
2020/03/04 星际争霸
人族 TERRAN 概述
2020/03/14 星际争霸
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
PHP操作文件方法问答
2007/03/16 PHP
php类中private属性继承问题分析
2012/11/01 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
python批量赋值操作实例
2018/10/22 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
苹果香港官方商城:Apple香港
2016/09/14 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
创业计划书模版
2014/02/05 职场文书
经销商订货会主持词
2014/03/27 职场文书
产品生产计划书
2014/05/07 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书