将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并将其存储在数据库中的列中的主要内容,如果未能解决你的问题,请参考以下文章

将 Oracle 行序列化为 XML

C# 将 XML 反序列化为模型类错误 - <xmlns=""> 不是预期的

如何将 XML 反序列化为 C# 中的对象? [复制]

将 Web 服务 API 中的 XML 字符串反序列化为 C# 对象

将 XML 审计数据存储到文件系统或 MS Access 表?

怎么样从多列的DataTable里取需要的几列