C#如何检索存储在BLOB中的XML,然后更新并存储

时间:2017-04-26 12:23:31

标签: c# .net xml database

我有以下问题。 我在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();

你有什么想法吗?

2 个答案:

答案 0 :(得分:0)

  1. 检查OracleDataReader的文档以确定如何从中获取字符串字段。
  2. 使用XmlDocument.LoadXml(String)从字符串
  3. 创建可编辑的结构
  4. 检查XmlDocument的文档以确定如何更改元素
  5. 将xml保存回字符串有点复杂,但您可以关注this example

答案 1 :(得分:0)

如果要更新行,则需要更改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);
}

在列表上循环并执行更新语句之后:

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可能更容易。