C#如何检索存储在BLOB中的XML,然后更新它并存储
Posted
技术标签:
【中文标题】C#如何检索存储在BLOB中的XML,然后更新它并存储【英文标题】:C# how to retrieve XML stored in BLOB, then update it and store 【发布时间】:2017-09-23 20:27:20 【问题描述】:我有以下问题。 我正在用 C# 编码,我需要从 BLOB 中检索 XML,然后使用它(使用 XML)。
部分来自我的代码
...
var xmldoc = new XmlDocument();
OracleCommand oraCmd = new OracleCommand();
oraCmd.Connection = db.oraConnection;
oraCmd.CommandText = "SELECT XML_IN_BLOB FROM TABLE_X";
oraCmd.CommandType = CommandType.Text;
OracleDataReader dr = oraCmd.ExecuteReader();
dr.Read();
while (dr.Read())
// 1. convert dr. value into XML //var xmldoc
// 2. update XML element
// 3. store/update BLOB in TABLE_X
db.Close();
你有什么想法吗?
【问题讨论】:
如果可以的话,将BLOB
更改为CLOB
,并作为.Net String
工作,作为通用数据类型String xml_str = reader.GetValue(1)
,或者如果您使用OracleDataReader
,如我所见,你可以调用reader.GetOracleLob
,目标是简单的获取字符串,然后使用XmlDocument.LoadXml(String)
。
【参考方案1】:
-
检查OracleDataReader 的文档以确定如何从中获取字符串字段。
使用XmlDocument.LoadXml(String) 从字符串创建可编辑结构
检查 XmlDocument 的文档以确定如何更改元素
将 xml 保存回 String 有点复杂,但您可以关注 this example。
【讨论】:
LoadXml(String) - 需要字符串作为输入,这意味着之前 - 您需要从 BLOB 中检索字符串。我不知道怎么做。 阅读 Seyrans 的评论。【参考方案2】:如果要更新行,则需要更改 SELECT 以包含 Id。您还需要结构来保留所有 id 和修改后的 xml 字节。
var xmlsToUpdate = new Dictionary<int, byte[]>();
while (dr.Read())
//Open it as a blob, then load the xml from the Stream.
var id = dr.GetInt32(0);
var stream = dr.GetOracleLob(1);
var xml = new XmlDocument();
xml.Load(stream);
//manipulate xml
var ms = new MemoryStream();
xml.Save(ms);
var bytes = ms.ToArray();
xmlsToUpdate.Add(id, bytes);
在 thar 循环遍历列表并执行更新语句之后:
cmd.CommandText = "UPDATE TABLEX SET XML_IN_BLOB = :data WHERE id=" + item.Key;
cmd.Parameters.Add(":data", OracleType.Blob);
cmd.Parameters[":data"].Value = item.Value;
别忘了处理一次性用品。使用 ORM 可能更容易。
【讨论】:
以上是关于C#如何检索存储在BLOB中的XML,然后更新它并存储的主要内容,如果未能解决你的问题,请参考以下文章
APIM:从 Azure DevOps CD 管道中的 Azure Blob 存储中检索策略 XML 失败,如收到错误,如提供的链接格式错误
如何将图像存储为 Sqlite 中的 blob 以及如何检索它?
使用 C# 从存储在 azure blob 存储中的 200gb 文本文件中读取一行
如何保护 azure blob 存储 url 不被任何使用开发人员工具的人检索
如何使用 C# 中的 Azure.Storage.Blobs 从 Azure 存储 Blob 以 ByteArray 格式获取文件