C#操作Oracle数据库中文乱码问题解决

时间:2022-09-16 17:58:51

最近公司有一个对外项目,采用的是oracle数据库,以前做的项目基本都是SQLserver,有和oracle对接的也就一些简单的增删查改。

还巧合的遇到乱码问题,网上各种查找,筛选,总算是把问题解决了。但是也不算完美,所以还想看看有没有大侠有没有更好的办法。

服务器编码为:AMERICAN_AMERICA.WE8ISO8859P1

首先HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1增加字符串值NLS_LANG 值:AMERICAN_AMERICA.WE8ISO8859P1

 

使用OracleClient读取是乱码,并且改注册表项、环境变量都没用。扑街。。。

 

使用ODP.NET,读取写入均是乱码,写入可以在执行之前对SQL语句进行重新编码解决,但是读取, 如果有几千行数据,每行几十个字段 , 一个一个转 ?   扑街。。。

 

最终使用的是OleDb,

连接字符串配置的Provider=oraoledb.oracle (网上有说写成 Provider = MSDAORA.1  这个貌似不太支持64位系统  直接连接不上数据库)

读取中文没啥问题,插入更新之前,把SQL语句重新编码一下就行

public string ToChString(string str)
        {
            System.Text.Encoding gbk_encoder = System.Text.Encoding.GetEncoding("gb2312");
            byte[] bs = gbk_encoder.GetBytes(str);
            char[] cs = new char[bs.Length];
            for (int i = 0; i < bs.Length; i++)
                cs[i] = Convert.ToChar(bs[i]);
            return new String(cs);
        }

如果还有更好的办法麻烦大侠推荐下 ~