我的问题: 我正在进行REST调用以获取一些信息并返回一个XML文档,但我需要的值以CLOB形式表示。
所以我所拥有的是CLOB的字符串表示,例如“eJydVd1v4jgQf / dfkYd9uJOuEQFK6aE8OInTppeviw3 ......等等。”
我希望以纯文本形式看到这些细节,但我无法弄清楚如何做到这一点。我已经搜索了解密/反序列化clobs,但一无所获。我还为C#找到了System.Data.OracleClient命名空间,但这只有在你从数据库中读取clob时才有用。我相信。
那么有谁可以帮我找到一种方法将这个clob数据解密成字符串形式或将字符串转换为clob对象oracle用品?
非常感谢,
Fintan
答案 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;
}