oracle c# 插入中文乱码,C#写入Oracle 中文乱码问题

这个问题是我刚踏入工作觉得最坑的一个问题,找了很多方法、也问过不少人,但还是没能解决,偶然间返现了新大陆....

具体问题描述是这样的:

我可以读取Oracle数据库中已有的中文内容,并能正确显示(Oracle中的中文通过SQLplus录入),但当我使用C#程序插入中文记录时,发现数据库中显示为乱码,读取出来也为乱码。我试了很多种编码方式,问题都不能解决。

以下是查找相关资料得到的解决办法:

主要问题是: oracle客户端软件的字符编码与服务器端的字符编码不一致造成的。

oracle的字符编码为 ZHS16GBK

C#中Encoding.Default为"GB2312"

oracle服务端字符编码为: ZHS16GBK

oracle客户端字符编码为:  WE8ISO8859P1

解决办法有三种:

(1)修改客户端注册表: 找到Oracle安装注册项下的NLS_LANG,将其值改为"SIMPLIFIED CHINESE_CHINA.ZHS16GBK

(2)通过调用_putenv函数,在程序中用代码设置:

using System.Runtime.InteropServices;

...

[DllImport("msvcrt.dll")]

private static extern int _putenv(string str);

...

_putenv("NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK");

//数据库操作

_putenv("NLS_LANG = AMERICAN_AMRICA.WE8ISO8859P1");

(3)通过C#自带的函数设置环境变量

System.Environment.SetEnvironmentVarible("NLS_LANG "," SIMPLIFIED CHINESE_CHINA.ZHS16GBK");

//数据库操作

System.Environment.SetEnvironmentVarible("NLS_LANG ","AMERICAN_AMRICA.WE8ISO8859P1");

需要注意的是: 第二、三种利用函数进行设置环境变量的操作必须在数据库操作的外边才能生效。

发现参加工作之后,自己慢慢的喜欢上了博客园,隔几天就习惯性都进去看一看,看到对自己有帮助的就立马给收藏了,碰到有疑问的也会大胆的提出质疑,这里真的是个好平台,是程序员

的又一个施展空间。在这可以碰到很多的大神、屌丝或牛B的人物,我希望能同大家一起成长!废话不多少,学习的点点滴滴,都值得与大家分享!

原文:http://www.cnblogs.com/hwjy/p/3865702.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值