请教通过odp.net,获取数据后,中文变乱码

时间:2022-12-15 13:01:40
1、操作系统win2008server 64位,数据库oracle11gr2 64位  ,oracle11g client 32位
2、c#开发的webservice,通过odac查询oralce数据库,其它字段返回结果正常,就是有中文的字段,返回是乱码。
3、安装的ODAC112040Xcopy_64bit这个版本。

3、求帮助!急!!!!!!!!

15 个解决方案

#1


4、从sqlplus,pl/sql developer 查询显示均正常

#2


1)看下数据库的字符集编码是什么?(select * from nls_database_parameters)
2)看下出问题字段的编码格式和16进制存储的数据内容是什么?(select dump(字段名,1016) from 表名 where 随便选一行)

#4


引用 2 楼 jshi123 的回复:
1)看下数据库的字符集编码是什么?(select * from nls_database_parameters)
2)看下出问题字段的编码格式和16进制存储的数据内容是什么?(select dump(字段名,1016) from 表名 where 随便选一行)


字符集:AMERICAN_AMERICA.WE8ISO8859P1,数据格式就是很varchar2,存储的人员姓名

#5


修改Oracle数据库的编码-----在注册表中

#6


请教通过odp.net,获取数据后,中文变乱码

修改完记得重启电脑

#7


错了, 请教通过odp.net,获取数据后,中文变乱码,,把这个编码加到系统环境变量中

然后重启电脑

#8


引用 7 楼 xue529290400 的回复:
错了, 请教通过odp.net,获取数据后,中文变乱码,,把这个编码加到系统环境变量中

然后重启电脑


这些都已经改过了,没有用

#9


可以是字段中存储的内容不符合编码格式,把dump出来的结果和对应的中文贴出来看下:
select dump(姓名字段,1016) from 表名 

#10


引用 9 楼 jshi123 的回复:
可以是字段中存储的内容不符合编码格式,把dump出来的结果和对应的中文贴出来看下:
select dump(姓名字段,1016) from 表名 

从pb,sqlplus,pl/sql developer读出来均正常,因为是做接口,更改不了别人的数据库

#11


引用 3 楼 save4me 的回复:
参考
解决Oracle处理中文乱码的一种方法
C#用oledb连接Oracle


1、用ole_db连接是可以,但是不稳定,一会显示正常,一会提示:发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。
所以改成用odp.net,odp.net显示什么都正常,就是中文变为乱码。
郁闷呀

#12


中文乱码肯定是因为编码的问题导致的。 你看看你客户端的编码是什么样的 是不是和他的数据库用的编码是相同的。

不相同的话,要转换

#13


引用 11 楼 rebirthtiger 的回复:
Quote: 引用 3 楼 save4me 的回复:

参考
解决Oracle处理中文乱码的一种方法
C#用oledb连接Oracle


1、用ole_db连接是可以,但是不稳定,一会显示正常,一会提示:发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。
所以改成用odp.net,odp.net显示什么都正常,就是中文变为乱码。
郁闷呀

ADODB试过么?

#14


引用 13 楼 Z65443344 的回复:
Quote: 引用 11 楼 rebirthtiger 的回复:

Quote: 引用 3 楼 save4me 的回复:

参考
解决Oracle处理中文乱码的一种方法
C#用oledb连接Oracle


1、用ole_db连接是可以,但是不稳定,一会显示正常,一会提示:发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。
所以改成用odp.net,odp.net显示什么都正常,就是中文变为乱码。
郁闷呀

ADODB试过么?


没明白

#15


没人知道吗?

#1


4、从sqlplus,pl/sql developer 查询显示均正常

#2


1)看下数据库的字符集编码是什么?(select * from nls_database_parameters)
2)看下出问题字段的编码格式和16进制存储的数据内容是什么?(select dump(字段名,1016) from 表名 where 随便选一行)

#3


#4


引用 2 楼 jshi123 的回复:
1)看下数据库的字符集编码是什么?(select * from nls_database_parameters)
2)看下出问题字段的编码格式和16进制存储的数据内容是什么?(select dump(字段名,1016) from 表名 where 随便选一行)


字符集:AMERICAN_AMERICA.WE8ISO8859P1,数据格式就是很varchar2,存储的人员姓名

#5


修改Oracle数据库的编码-----在注册表中

#6


请教通过odp.net,获取数据后,中文变乱码

修改完记得重启电脑

#7


错了, 请教通过odp.net,获取数据后,中文变乱码,,把这个编码加到系统环境变量中

然后重启电脑

#8


引用 7 楼 xue529290400 的回复:
错了, 请教通过odp.net,获取数据后,中文变乱码,,把这个编码加到系统环境变量中

然后重启电脑


这些都已经改过了,没有用

#9


可以是字段中存储的内容不符合编码格式,把dump出来的结果和对应的中文贴出来看下:
select dump(姓名字段,1016) from 表名 

#10


引用 9 楼 jshi123 的回复:
可以是字段中存储的内容不符合编码格式,把dump出来的结果和对应的中文贴出来看下:
select dump(姓名字段,1016) from 表名 

从pb,sqlplus,pl/sql developer读出来均正常,因为是做接口,更改不了别人的数据库

#11


引用 3 楼 save4me 的回复:
参考
解决Oracle处理中文乱码的一种方法
C#用oledb连接Oracle


1、用ole_db连接是可以,但是不稳定,一会显示正常,一会提示:发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。
所以改成用odp.net,odp.net显示什么都正常,就是中文变为乱码。
郁闷呀

#12


中文乱码肯定是因为编码的问题导致的。 你看看你客户端的编码是什么样的 是不是和他的数据库用的编码是相同的。

不相同的话,要转换

#13


引用 11 楼 rebirthtiger 的回复:
Quote: 引用 3 楼 save4me 的回复:

参考
解决Oracle处理中文乱码的一种方法
C#用oledb连接Oracle


1、用ole_db连接是可以,但是不稳定,一会显示正常,一会提示:发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。
所以改成用odp.net,odp.net显示什么都正常,就是中文变为乱码。
郁闷呀

ADODB试过么?

#14


引用 13 楼 Z65443344 的回复:
Quote: 引用 11 楼 rebirthtiger 的回复:

Quote: 引用 3 楼 save4me 的回复:

参考
解决Oracle处理中文乱码的一种方法
C#用oledb连接Oracle


1、用ole_db连接是可以,但是不稳定,一会显示正常,一会提示:发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。
所以改成用odp.net,odp.net显示什么都正常,就是中文变为乱码。
郁闷呀

ADODB试过么?


没明白

#15


没人知道吗?