c# oracle【us7ascii】 sys.xmltype字段 中文乱码该如何解决

shaplin 2012-11-06 02:52:54
最近有个项目组安装数据库的时候将字符集设置成了【SIMPLIFIED CHINESE_CHINA.US7ASCII】,服务端客户端一致,本身这个字符集存储中文是没问题的,可是在我们的系统程序使用OracleDataReader读取和写入的时候,中文部分全成了“?”。有哪位大侠帮帮忙指点一下,谢谢了。

这几天在晚上找了些资料,自己也研究了下,已经解决了一些事情:
1、字符串类型的字段,类型一定要用NVARCHAR,不能用varchar
2、相比较之下,使用DataSet访问数据时,一切正常,但是DataReader.....


就是这个SYS.XMLTYPE字段实在是不知道怎么解决了,客户要求 数据库字符集一定要设置为 US7ASCII

附上我的代码:

string connectionString = "Data Source =testascii;Persist Security Info=True;User ID=common;Password=common";


string strProperty = @"<root>中国</root>";


string strSql = @"insert into d_test values(:nvar,SYS.XMLType(:xml))";
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();

OracleTransaction tr = null;
if (System.Transactions.Transaction.Current == null) tr = connection.BeginTransaction();
using (OracleLob clob = OracleHelper.CreateTempLob(connection, tr, OracleType.Clob, strProperty))
{
OracleParameter[] commandParameters = new OracleParameter[2];
commandParameters[0] = new OracleParameter("nvar", OracleType.NVarChar);
commandParameters[0].Value = DateTime.Now.ToLongDateString();
commandParameters[1] = new OracleParameter("xml", OracleType.Clob);
commandParameters[1].Value = clob;
int count = OracleHelper.ExecuteNonQuery(connection, tr, CommandType.Text, strSql, commandParameters);


//OracleCommand cmd = new OracleCommand(strSql,connection);
//cmd.Transaction = tr;
//OracleParameter p1 = new OracleParameter("nvar", OracleType.NVarChar);
//OracleParameter p2 = new OracleParameter("xml", OracleType.Clob);
//p1.Value = DateTime.Now.ToLongDateString();
//p2.Value = clob;
//cmd.Parameters.Add(p1);
//cmd.Parameters.Add(p2);

//int count = cmd.ExecuteNonQuery();



if (tr != null) tr.Commit();
connection.Close();

if (count >= 1)
{
MessageBox.Show("ok");
}
else
{
MessageBox.Show("shit");
}
}
}


d_test表结构:
create table D_TEST
(
NVAR NVARCHAR2(100),
XMLTYPE SYS.XMLTYPE
)
...全文
538 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaplin 2012-11-07
  • 打赏
  • 举报
回复
还没解决。。。。。。
XBodhi. 2012-11-07
  • 打赏
  • 举报
回复
shaplin 2012-11-07
  • 打赏
  • 举报
回复
使用oledb oracle.dataaccess来处理 都还没实现。 打算用dataset试试,不过貌似用dataset处理XMLTYPE也很麻烦
shaplin 2012-11-07
  • 打赏
  • 举报
回复
引用 3 楼 zjx198934 的回复:
能不用SYS.XMLTYPE这个类型吗?就用Clob 或者说SYS.XMLTYPE这个类型是被序列化了的 需要反序列化?
不行,我们系统很多字段都是sys.xmltype的, 好神奇的字符集,我将XML先转字符集什么的都不行,到数据库里面中文还是变成问号
zjx198934 2012-11-07
  • 打赏
  • 举报
回复
能不用SYS.XMLTYPE这个类型吗?就用Clob 或者说SYS.XMLTYPE这个类型是被序列化了的 需要反序列化?
shaplin 2012-11-07
  • 打赏
  • 举报
回复
急死了。。。。。。。。。。
shaplin 2012-11-06
  • 打赏
  • 举报
回复
么人在么。。。。。。。。要沉下去了

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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