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 DGMGRL ORA-16603报错的解决方法(DG Broker)
Apr 06 Oracle
Oracle设置DB、监听和EM开机启动的方法
Apr 25 Oracle
Oracle 区块链表创建过程详解
May 15 Oracle
Oracle更换为MySQL遇到的问题及解决
May 21 Oracle
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
Jun 04 Oracle
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
Jun 21 Oracle
RPM包方式安装Oracle21c的方法详解
Aug 23 Oracle
分析SQL窗口函数之排名窗口函数
Apr 21 Oracle
清空 Oracle 安装记录并重新安装
Apr 26 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
用PHP 快速生成 Flash 动画的方法
2007/03/06 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
微信支付扫码支付php版
2016/07/22 PHP
asp.net和php的区别点总结
2019/10/10 PHP
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python多继承顺序实例分析
2018/05/26 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
python中web框架的自定义创建
2019/09/08 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
中国高端家电购物商城:顺电
2018/03/04 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
新闻专业个人求职信
2013/12/19 职场文书
产品推广策划方案
2014/05/10 职场文书
无保留意见审计报告
2015/06/05 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书