2014-08-27 102 views
0

我的問題: 我正在做一個REST調用來獲取一些信息,並返回一個XML文件,但我需要的值在CLOB代表形成。解密CLOB數據(以字符串形式),以實際字符串的

所以我所擁有的是一個CLOB的字符串表示,例如「eJydVd1v4jgQf/dfkYd9uJOuEQFK6aE8OInTppeviw3 ...等」

我想以純文本的形式查看這些詳細信息,但我無法弄清楚如何執行此操作。我已經搜索瞭解密/反序列化clob,但什麼也沒找到。我還發現了C#的System.Data.OracleClient命名空間,但這隻有在您從數據庫中讀取clob時纔有用,我相信。

所以任何人都可以幫助我找到一種方法來解密這個clob數據到字符串形式或將字符串轉換成clob對象oracle耗材?

非常感謝,

Fintan

+0

這似乎是base64編碼數據。 – 2014-08-27 09:06:22

+0

感謝您的回覆,我剛剛嘗試使用base64解碼器,並回復了更多廢話。 – FintanH 2014-08-27 09:20:51

回答

0

在我設置的XML的CLOB被編碼爲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; 
}