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,然后更新它并存储的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 连接到 Blob 存储容器

APIM:从 Azure DevOps CD 管道中的 Azure Blob 存储中检索策略 XML 失败,如收到错误,如提供的链接格式错误

如何将图像存储为 Sqlite 中的 blob 以及如何检索它?

使用 C# 从存储在 azure blob 存储中的 200gb 文本文件中读取一行

如何保护 azure blob 存储 url 不被任何使用开发人员工具的人检索

如何使用 C# 中的 Azure.Storage.Blobs 从 Azure 存储 Blob 以 ByteArray 格式获取文件