最近公司有一个对外项目,采用的是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); }
如果还有更好的办法麻烦大侠推荐下 ~