C#连接ORACLE出现乱码问题的解决方法
目录
- 方法一
- 方法二
- 方法三
- 方法四
方法一 连接字符串:
"Provider=oraoledb.oracle; Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.10.10)(PORT = 1521)))(CONNECT_DATA = https://www.it610.com/article/(SID = orcl))) ; User Id=user; Password=user"报错:未注册数据提供程序!
于是继续搜索,网上说需要安装oracle相关连接组件,这就很麻烦了,不可能所有机子都安装这个组件
于是继续找解决方法,最后发现以下连接是可以的,也就是在使用System.Data.OracleClient.OracleConnection时候,不再提示注册程序之类的, 问题终于解决了,查询结果也不乱码!
连接字符串:
"Provider=MSDAORA.1; Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =注意:Provider=MSDAORA.1; 而不是Provider=oraoledb.oracle;
10.20.10.10
)(PORT = 1521)))(CONNECT_DATA = https://www.it610.com/article/(SID = orcl))) ; User Id=lswen; Password=1169"
方法二 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同学给出的解决方法
【C#连接ORACLE出现乱码问题的解决方法】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 = https://www.it610.com/article/(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 = https://www.it610.com/article/(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 = https://www.it610.com/article/(SID = DEV))) ; User Id=lswen; Password=1169"将本地字符集改为与服务器相同,方法同方案一相同。
这一下问题终于解决了。
强调连接字符串因该使用Provider=MSDAORA.1; 不能使用Provider=oraoledb.oracle;
方案二 成功了。
总结 :
不管是WE8DEC,还是其他一些西欧字符集都存在这样的问题,用第二种方案应该都可以解决。
推荐阅读
- oracle|oracle java jdk install
- py连接mysql
- Android|Android BLE蓝牙连接异常处理
- 市场何时出现转机()
- 4U
- 用python统计小说出现频率最高的词语
- springboot整合数据库连接池-->druid
- 好用,便宜
- Python3|Python3 MySQL 数据库连接
- 数据技术|一文了解Gauss数据库(开发历程、OLTP&OLAP特点、行式&列式存储,及与Oracle和AWS对比)