最近有个项目组安装数据库的时候将字符集设置成了【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
)