Question

I am trying to save string with bullet char(8226) in it from .NET code via ODP to Oracle database.

The string is "•hello".

Selecting this string back returns "?hello" (first char is char 63 instead of bullet char).

The column datatype is nvarchar2(100)

My configuration:

.net 4.5,odp(32bit)

Oracle client 11.2 NLS_LANG: AMERICAN_AMERICA.IW8ISO8859P8

Oracle server 11.2 NLS_CHARACTERSET : IW8ISO8859P8 NLS_NCHAR_CHARACTERSET : AL16UTF16 NLS_LANGUAGE : AMERICAN NLS_TERRITORY : AMERICA

Thank's a lot !!!

Was it helpful?

Solution

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top