.net下读写字符串乱码的问题

cengjing1999 2016-08-19 02:28:56
oracle 版本11g

服务器端编码 WE8ISO8859P15
select userenv('language') from dual
查询结果: AMERICAN_AMERICA.WE8ISO8859P15

客户端已设置nls_lang : AMERICAN_AMERICA.WE8ISO8859P15

nls_lang设置为AMERICAN_AMERICA.WE8ISO8859P15起效后 sqlplus和plsql developer能正确识别中文,否则读写皆为乱码

但是.net 不论使用 odp.net还是 微软自带的system.data.oracleclient,中文读写都是乱码
odp.net测试代码贴出来如下

读取
using (OracleConnection conn = new OracleConnection(connStr))
{
conn.Open();
var info = OracleGlobalization.GetClientInfo();

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select privilege_value from ui.user_role2 where cilaccount = 'Xudong A HOU' and roleid = 1";
cmd.CommandType = CommandType.Text;
var val = cmd.ExecuteScalar();
conn.Close();
return val.ToString();
}

写入
using (OracleConnection conn = new OracleConnection(connStr))
{
conn.Open();

//var info = conn.GetSessionInfo();
////label1.Text = info.Language;
//var ci = OracleGlobalization.GetClientInfo();

OracleCommand cmd = new OracleCommand();

cmd.Connection = conn;
cmd.CommandText = "update ui.user_role2 set privilege_value = '你好oracle' where cilaccount = 'Xudong A HOU' and roleid = 1";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
conn.Close();
}

代码运行时候的OracleGlobalization中的编码已经为WE8ISO8859P15

请各位大侠们指点
...全文
426 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cengjing1999 2016-08-20
  • 打赏
  • 举报
回复
怎么就没人回答呢,这个问题不常见么
cengjing1999 2016-08-19
  • 打赏
  • 举报
回复
服务器端的编码不能改,他们系统用了10来年了,只是以前是java的,现在我们要做.net的,大神有啥其他办法没
ghx287524027 2016-08-19
  • 打赏
  • 举报
回复
AMERICAN_AMERICA.WE8ISO8859P15 对中文的支持不是很好。如果中文数据比较多的话,建议都改成 zhsGBK16的

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧