如何获取Oracle数据库中的CLOB字段的值,为什么我得到的是乱码一堆,不管存入表中的是中文还是英文.
下面存入数据时的代码:
System.Text.Encoding unicode=System.Text.Encoding.UTF8;
byte[] tempbuff=unicode.GetBytes(strValue);
OracleConnection cnn=new OracleConnection(DataAccessOracle.cnnstring);
cnn.Open();
OracleTransaction tx = cnn.BeginTransaction();
OracleCommand cmd = cnn.CreateCommand();
cmd.Transaction = tx;
cmd.Connection=cnn;
cmd.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
cmd.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
OracleLob tempLob=(OracleLob)cmd.Parameters[0].Value;
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(tempbuff,0,tempbuff.Length);
tempLob.EndBatch();
string strOracle="insert into pmis.zzzz(id,name,value1) values(4,'z',:value1)";
OracleParameter objPara=new OracleParameter("value1",OracleType.Clob);
objPara.Value=tempLob;
cmd=new OracleCommand(strOracle,cnn);
cmd.Parameters.Add(objPara);
cmd.Transaction=tx;
cmd.ExecuteNonQuery();
tx.Commit();
cnn.Close();
读取时的代码:
OracleConnection cnn=new OracleConnection(DataAccessOracle.cnnstring);
cnn.Open();
OracleTransaction tx = cnn.BeginTransaction();
OracleCommand cmd = new OracleCommand("select * from pmis.zzzz where id=4",cnn);
cmd.Transaction=tx;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
MessageBox.Show(dr.GetOracleLob(2).Value.ToString());
tx.Commit();
dr.Close();
cnn.Close();
无论我输入时用GB2312还是Unicode还是UTF8显示时都是乱码,在sqlplus显示时也是乱码,请教高手如何解决这个问题,是不是存入表中的时候编码就不对?
这个问题已经折磨我好长时间了,我很急于解决,先谢了!