将DataTable的几列序列化为xml并将其存储在数据库中的列中
Posted
技术标签:
【中文标题】将DataTable的几列序列化为xml并将其存储在数据库中的列中【英文标题】:Serializing few columns of DataTable into xml and storing it in a column in Database 【发布时间】:2014-06-18 20:37:04 【问题描述】:我在代码中有一个 DataTable,格式如下
DataSet ds = new DataSet("MyDataset");
DataTable dt = new DataTable("Data");
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Date", typeof(DateTime));
dt.Columns.Add("Source", typeof(string));
dt.Columns.Add("Field1", typeof(String));
dt.Columns.Add("Field2", typeof(String));
//DataRow dr= dt.NewRow();
dt.Rows.Add("ABC",DateTime.UtcNow,"Source1","10","11");
dt.Rows.Add("CDE", DateTime.UtcNow, "Source2", "4", "5");
dt.Rows.Add("FGH", DateTime.UtcNow, "Source1", "", "");
ds.Tables.Add(dt);
即该表具有 3 个永久列“名称”、“日期”和“源”,并且可以在运行时更改多个字段列,并且可以创建具有更多列的表。
我需要将上面的 DataTable 存储在 DB 中的一个表中,例如
ColumnName Name |Date |Source|Fields
Type of string|DateTime|String|XML
如何有效地序列化字段列并通过存储过程将其发送到数据库中,以便一次保存多个名称和日期。
我还需要在代码中对上表进行缓存,以便我们可以快速访问数据。我正在考虑使用
Dictionary< Name +Date+Source,< Dictionary< fieldName,fieldValue>>
您能否提出实现上述目标的方法
【问题讨论】:
如果你将你的dataTable转换成XML,然后将它传递给参数中的存储过程。现在该参数的类型是 varchar(max) 还是 XML,由您决定。如果您在 varchar 中传递它,那么在 SP 中您必须将其转换为 XML 数据类型,然后读取 XML 并获取标签值并根据您的 SP 中的要求插入到您的表中。您可以使用 DataTable 的 WriteXml() 方法将 dataTable 的内容转换为 XML。 【参考方案1】:你可以使用数据表的WriteXml方法从中获取对应的XML,然后在App层使用XPath将三列作为参数传递给sp,或者在存储过程中使用XPath获取三从 XML 中删除列,删除它们,然后在 XML 字段中保存其余部分,以从 XML 中删除名称、日期、源(不要将相同的数据保存两次)。
现在是缓存的事情。如果现在有大量数据(考虑只将那些经常访问的数据放在那里)或尝试 Entrerprice 库中的 chache 块,字典会很好。
【讨论】:
以上是关于将DataTable的几列序列化为xml并将其存储在数据库中的列中的主要内容,如果未能解决你的问题,请参考以下文章
C# 将 XML 反序列化为模型类错误 - <xmlns=""> 不是预期的
将 Web 服务 API 中的 XML 字符串反序列化为 C# 对象