我有以下问题。 我在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();
你有什么想法吗?
答案 0 :(得分:0)
答案 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可能更容易。