关于C#,.net 访问oracle中文乱码问题
2013-11-04 16:29
806 查看
最近我用程序读取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,还是其他一些西欧字符集都存在这样的问题,用第二种方案应该都可以解决。
工作环境:服务器 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,还是其他一些西欧字符集都存在这样的问题,用第二种方案应该都可以解决。
相关文章推荐
- 关于C#,.net 访问oracle中文乱码问题
- C# Oracle insert 过程中出现中文乱码问题
- c#读写oracle 中文乱码问题解决
- 关于url参数中文乱码的问题 【asp.net C#】
- C#中关于搜狗地图web服务api的httpresponse中回应json中文乱码的问题 Encoding
- C#访问MySQL数据库时中文乱码问题分析及解决
- C# 使用System.Data.OleDb;避免oracle中文乱码问题
- 关于Oracle中文字符乱码的问题与解决方案
- 关于.net(C#)中的跨进程访问的问题
- C#访问数据库时中文乱码问题分析及解决
- 关于.net(C#)中的跨进程访问的问题
- 关于xcode下访问mysql出现中文乱码的问题
- 关于 server.urlencode 中文乱码的问题 asp 和 .net 都说明一下
- c# 关于iphone 传值中文字符乱码的问题
- 关于.net(C#)中的跨进程访问的问题
- C#连接Oracle中文乱码问题解决方法
- win7 64位系统 Oracle32bit + PL/SQL访问Orale服务,Oracle 11g的安装,中文乱码问题的解决
- C#request和response的中文乱码问题
- 关于python中使用PYQT时中文乱码问题
- 关于Android使用HttpURLConnection传输含有中文JSON数据的报错、乱码问题