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 相关文章推荐
mybatis使用oracle进行添加数据的方法
Apr 27 Oracle
使用springboot暴露oracle数据接口的问题
May 07 Oracle
Oracle更换为MySQL遇到的问题及解决
May 21 Oracle
Oracle创建只读账号的详细步骤
Jun 07 Oracle
使用Oracle跟踪文件的问题详解
Jun 28 Oracle
快速学习Oracle触发器和游标
Jun 30 Oracle
详解Oracle块修改跟踪功能
Nov 07 Oracle
排查并解决Oracle sysaux表空间异常增长
Apr 20 Oracle
instantclient客户端 连接oracle数据库
Apr 26 Oracle
oracle设置密码复杂度及设置超时退出的功能
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
php中curl使用指南
2015/02/05 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
2013/10/17 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
全面了解js中的script标签
2016/07/04 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
解析Python中的__getitem__专有方法
2016/06/27 Python
Python文件读写常见用法总结
2019/02/22 Python
Django 静态文件配置过程详解
2019/07/23 Python
Django 重写用户模型的实现
2019/07/29 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
财务信息服务专业自荐书范文
2014/02/08 职场文书
12月红领巾广播稿
2014/02/13 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
取保候审保证书
2014/04/30 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
超级详细实用的pycharm常用快捷键
2021/05/12 Python