主要问题是:oracle客户端软件的字符编码与服务器端的字符编码不一致造成的。
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");//数据库操作】