最近有个项目组安装数据库的时候将字符集设置成了【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
)
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
)
解决方案 »
- 求助:调用使用VirtualAlloc函数的非托管DLL的一个奇怪问题
- 页面的日历,还有日程提醒功能如何实现。。。。。。。。。。。。【标题要长】
- 本地连接
- 用这个读取旧格式的excel不行呀?Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + strFileName + ";Extended Properties = Excel 8.
- 能否将C#编写的.exe代码,编译成本机机器码?
- 不知道是垃圾面试题还是好的面试题?大家看看吧!
- 我想实现这样的功能:在数据库中提取的记录值为1或者为0,在DataGrid中显示这个字段记录值不是原值1或者0,而为"是"和"否",请大家帮助实现这
- 急,关于Windows7+VS2008SP1+IIS7的问题!
- 如何作用DataAdapter更新數據庫?
- 有关于C#中 控件splitContainer的问题
- 通过kernel32.dll调用动态库调时第一个接口函数能成功,第二个时“无法加载 DLL“kernel32.dll”
- 如何在一个线程结束时,调用另外一个函数?
或者说SYS.XMLTYPE这个类型是被序列化了的 需要反序列化?
好神奇的字符集,我将XML先转字符集什么的都不行,到数据库里面中文还是变成问号
打算用dataset试试,不过貌似用dataset处理XMLTYPE也很麻烦