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

本文分享了在使用Oracle数据库时遇到的乱码问题及解决方案。通过调整服务器编码设置、修改注册表项NLS_LANG值,并采用OleDb连接组件配合自定义编码转换函数,最终实现了数据读写的正常显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司有一个对外项目,采用的是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);
        }

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

转载于:https://www.cnblogs.com/ck7193/p/7485230.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值