在Oracle中未正确保存项目符号字符

时间:2013-11-20 12:05:39

标签: c# .net oracle oracle11g odp.net

我正在尝试使用bullet代码(8226)将.NET中的字符串从.NET代码保存到Oracle数据库。

字符串是“•hello”。

选择此字符串返回“?hello”(第一个字符是char 63而不是bullet char)。

列数据类型为nvarchar2(100)

我的配置:

  

.net 4.5,odp(32bit)

     

Oracle客户端11.2 NLS_LANG:AMERICAN_AMERICA.IW8ISO8859P8

     

Oracle服务器11.2 NLS_CHARACTERSET:IW8ISO8859P8   NLS_NCHAR_CHARACTERSET:AL16UTF16 NLS_LANGUAGE:AMERICAN   NLS_TERRITORY:AMERICA

非常感谢!!!

1 个答案:

答案 0 :(得分:1)

string input = "•"; 
char s = input[0];
//table kuuku with column kuku(nvarchar2(100))
    string connString = "your connection";

    //CLEAN TABLE
    using (System.Data.OracleClient.OracleConnection cn = new System.Data.OracleClient.OracleConnection(connString))
    {
        cn.Open();
        System.Data.OracleClient.OracleCommand cmd = new System.Data.OracleClient.OracleCommand("delete from  kuku ", cn);
        cmd.ExecuteNonQuery();
        cn.Close();
    }


    //INSERT WITH PARAMETER BINDING - UNICODE SAVED
    using (System.Data.OracleClient.OracleConnection cn = new System.Data.OracleClient.OracleConnection(connString))
    {
        cn.Open();
        System.Data.OracleClient.OracleCommand cmd = new System.Data.OracleClient.OracleCommand("insert into  kuku (kuku) values(:UnicodeString)", cn);
        cmd.Parameters.Add(":UnicodeString", System.Data.OracleClient.OracleType.NVarChar).Value = input + " OK" ;
        cmd.ExecuteNonQuery();
        cn.Close();
    }

    //INSERT WITHOUT PARAMETER BINDING - UNICODE NOT SAVED
    using (System.Data.OracleClient.OracleConnection cn = new System.Data.OracleClient.OracleConnection(connString))
    {
        cn.Open();
        System.Data.OracleClient.OracleCommand cmd = new System.Data.OracleClient.OracleCommand("insert into  kuku (kuku) values('" +input+" WRONG')", cn);
        cmd.ExecuteNonQuery();
        cn.Close();
    }
    //FETCH RESULT
    using (System.Data.OracleClient.OracleConnection cn = new System.Data.OracleClient.OracleConnection(connString))
    {
        cn.Open();
        System.Data.OracleClient.OracleCommand cmd = new System.Data.OracleClient.OracleCommand("select kuku from kuku", cn);
        System.Data.OracleClient.OracleDataReader dr = cmd.ExecuteReader();
        if(dr.Read())
        {
            string output = (string) dr[0];
            char sa = output[0];
        }
        cn.Close();
    }
}

image from PL SQL