会编程的吸血鬼 2013-07-26 06:00 采纳率: 0%
浏览 2686

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

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

  • 写回答

2条回答 默认 最新

  • WorldMobile 2015-06-09 06: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这些工具会自动根据服务器上的设置来设置本地的显示字符集 所以你看的不是乱码。

    评论

报告相同问题?

悬赏问题

  • ¥15 用三极管设计—个共射极放大电路
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示