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笔记
Apr 05 Oracle
Oracle 数据仓库ETL技术之多表插入语句的示例详解
Apr 12 Oracle
oracle表分区的概念及操作
Apr 24 Oracle
zabbix agent2 监控oracle数据库的方法
May 13 Oracle
oracle覆盖导入dmp文件的2种方法
May 21 Oracle
Oracle11g R2 安装教程完整版
Jun 04 Oracle
Oracle创建只读账号的详细步骤
Jun 07 Oracle
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
Jun 21 Oracle
RPM包方式安装Oracle21c的方法详解
Aug 23 Oracle
Oracle安装TNS_ADMIN环境变量设置参考
Nov 01 Oracle
Oracle锁表解决方法的详细记录
Jun 05 Oracle
Oracle数据库事务的开启与结束详解
Jun 25 Oracle
Oracle 临时表空间SQL语句的实现
Sep 25 #Oracle
oracle索引总结
Sep 25 #Oracle
Oracle 死锁的检测查询及处理
Sep 25 #Oracle
RPM包方式安装Oracle21c的方法详解
oracle连接ODBC sqlserver数据源的详细步骤
Oracle以逗号分隔的字符串拆分为多行数据实例详解
快速学习Oracle触发器和游标
You might like
递归列出所有文件和目录
2006/10/09 PHP
PHP源码之 ext/mysql扩展部分
2009/07/17 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
PHP实现的oracle分页函数实例
2016/01/25 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
Webpack之tree-starking 解析
2018/09/11 Javascript
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
python实现汉诺塔方法汇总
2016/07/25 Python
Python命令行解析模块详解
2018/02/01 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
详解python的四种内置数据结构
2019/03/19 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
使用pip安装python库的多种方式
2019/07/31 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
宠物店的创业计划书范文
2014/01/11 职场文书
国防教育标语
2014/10/08 职场文书
同学聚会邀请函
2015/01/30 职场文书
小马王观后感
2015/06/11 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
2022/04/29 Servers
python绘制云雨图raincloud plot
2022/08/05 Python