2013-11-20 20 views
0

我试图从.NET代码中通过ODP向Oracle数据库保存带有bullet char(8226)的字符串。子弹字符未正确保存在Oracle

字符串是“•你好”。

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

的列数据类型是NVARCHAR2(100)

我的配置:

.NET 4.5,ODP(32位)

Oracle客户端11.2 NLS_LANG:AMERICAN_AMERICA.IW8ISO8859P8

甲骨文服务器11.2 NLS_CHARACTERSET:IW8ISO8859P8 NLS_NCHAR_CHARACTERSET:AL16UTF16 NLS_LANGUAGE:AMERICAN NLS_TERRITORY:AMERICA

非常感谢!

回答

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

+0

非常好,谢谢!真的解决问题! – user2381509