将clob数据(以字符串形式)解密为C#中的实际字符串

时间:2014-08-27 09:02:08

标签: c# clob

我的问题: 我正在进行REST调用以获取一些信息并返回一个XML文档,但我需要的值以CLOB形式表示。

所以我所拥有的是CLOB的字符串表示,例如“eJydVd1v4jgQf / dfkYd9uJOuEQFK6aE8OInTppeviw3 ......等等。”

我希望以纯文本形式看到这些细节,但我无法弄清楚如何做到这一点。我已经搜索了解密/反序列化clobs,但一无所获。我还为C#找到了System.Data.OracleClient命名空间,但这只有在你从数据库中读取clob时才有用。我相信。

那么有谁可以帮我找到一种方法将这个clob数据解密成字符串形式或将字符串转换为clob对象oracle用品?

非常感谢,

Fintan

1 个答案:

答案 0 :(得分:0)

在我的设置中,xml clobs被编码为Unicode。

使用以下代码可以获取字符串:

using (ODC.OracleDataReader rdr = cmd.ExecuteReader())
{
   if (rdr.Read())
   {
       var clob = rdr.GetOracleClob(0);
       // Can not simply use clob.Value - throws ORA-03113
       // Need to read input in chunks
       long length = clob.Length;
       List<byte> bytes = new List<byte>();
       int offset = 0;
       while (offset < length)
       {
          int readLength = (int)Math.Min(1024, length - offset);
          byte[] tmp = new byte[readLength];
          int readBytes = clob.Read(tmp, 0, readLength);
          offset += readLength;
          bytes.AddRange(tmp);
       }
    string xml = System.Text.Encoding.Unicode.GetString(bytes.ToArray()); 
    return DecodeXmlString(xml);
}
else
    return null;
}