2 wang0921zheng wang0921zheng 于 2013.07.26 14:00 提问

vs2008做的窗体程序查询oracle数据库数据,中文数据显示乱码

公司的服务器字符集是英文的,然后我在电脑上装了oracle和plsql,修改了oracle下的注册表字符集都为英文的。我在plsql中查询的中文数据都可以正常显示,我在里面添加的中文数据也可以正常显示。但是,我在vs2008中做了一个查询,将查询出来的数据绑定到datagridview控件上,就出现了中文数据显示乱码,还有就是我自己在vs2008中添加新数据,在plsql中看到的数据中中文都显示为???
跪求高手帮帮忙。。。

2个回答

lzp_lrp
lzp_lrp   Ds   Rxr 2015.06.09 14:16

参考一下这个

在客户端正确显示ORACLE数据库汉字信息,首先必须使服务器端的字符集与客户端的字符集一致;其次是加载到ORACLE数据库的数据字符集必须与服务器指定字符集一致。
如果数据库设置不修改是很难办到的
http://www.eygle.com/special/NLS_CHARACTER_SET_01.htm
http://www.eygle.com/special/NLS_CHARACTER_SET_06.htm
http://www2.ccw.com.cn/tips/9906/062804_04.asp
追问:
oracle服务器端的配置我的确不能动,但是我查过了服务器用的字符集是WE8ISO8859P1,只修改我的程序可不可以实现,我再次说明我用sqlplus和pl/sql读取出来的汉字数据都是正确的!
回答:
改变连接字符串,用orcale的链接字符串。在web.config里面



然后用oledb来取得链接
'''
''' ==打开oracle数据库,返回一个OleDb.OleDbConnection==
'''
Private Function Orcale() As OleDb.OleDbConnection
Dim connstr As String
Dim dbcon As New OleDb.OleDbConnection
connstr = WebConfigurationManager.ConnectionStrings("orac1").ConnectionString
With dbcon
.ConnectionString = connstr
.Open()
End With
Return dbcon
End Function
然后取得结果。
我这是VB.NET的代码,你自己转C#吧。我用这从orcale取得数据不是乱码(我本机装的orcale的客户端组件。orcale版本是9)。
追问:
我是用的Winform,做的是应用程序,不是网站,没有web.config这个文件啊!
回答:
哦。那你用
string connstr="Provider=MSDAORA.1;Data Source=数据库;Persist Security Info=False;User ID=用户名;Password=密码;Unicode=True;pooling = true“;
OleDbConnection dbcon=New OleDbConnection;
dbcon.ConnectionString =connstr;
dbcon.Open();
这样连接看看。其实最主要的就是上面的Unicode=True,这样用unicode返回结果。C#默认也是unicode的,这样应该就不会乱码了。
具体下面通过oledb返回结果我就不写了。你先试试看。
追问:
谢谢,用你的方法问题已经解决了,但是我还是在想如果用oracleclient空间中的oracleconnection、oraclecommand、oracledadaadapter是不是也可以读取出来汉字啊!呵呵,不好意思,还能再说说吗?
回答:
其实主要就是那个字符集。不知道你服务器上怎么设置的,如果没设置好像就是unicode字符集
而你本机用的是简体中文的gb2312,所以读取是乱码。而plsql这些工具会自动根据服务器上的设置来设置本地的显示字符集 所以你看的不是乱码。

lzp_lrp
lzp_lrp   Ds   Rxr 2015.06.09 14:16
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!