【问题标题】:Strongly typed dataset - XML Serialization强类型数据集 - XML 序列化
【发布时间】:2013-05-13 12:25:32
【问题描述】:

我的项目中有一个类型化的数据集,我需要从 XML 导入数据。我设法将数据导入到我的类型化数据集中的 Tables 集合中,但我需要通过 Annotations 访问数据 - 与我的数据集中的表命名相同的属性。

this.ConfigDataSet.Reset();
this.ConfigDataSet.ReadXml(FileName,XmlReadMode.ReadSchema);
this.ConfigDataSet.AcceptChanges();

我必须逐个字段复制数据吗?

我有这样的事情:

this.ConfigDataSet.Tables["TabName"].Rows.Count //returns 3 
this.ConfigDataSet.TabName.Rows.Count //returns 0

我这样写xml:

this.ConfigDataSet.AcceptChanges();
this.ConfigDataSet.WriteXml(FileName,XmlWriteMode.WriteSchema);

【问题讨论】:

  • 你检查过你的xml文件,是不是在文件中写入数据?
  • 是的。正如我所说,数据在新数据集中,但只是在 Table 属性中。
  • 查看下面的答案

标签: c# datatable dataset xml-serialization strongly-typed-dataset


【解决方案1】:

看看这个:

class Program
{
    static void Main(string[] args)
    {
        DataTable tbl = GetTable();
        DataSet ds = new DataSet();
        ds.Tables.Add(tbl);
        //file path to write xml file
        ds.WriteXml("test.xml");

        DataSet ds2 = new DataSet();
        //file path to read xml file
        ds2.ReadXml("test.xml");
    }
    static DataTable GetTable()
    {
        DataTable table = new DataTable();
        table.Columns.Add("Dosage", typeof(int));
        table.Columns.Add("Drug", typeof(string));
        table.Columns.Add("Patient", typeof(string));
        table.Columns.Add("Date", typeof(DateTime));

        table.Rows.Add(25, "Indocin", "David", DateTime.Now);
        table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
        table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
        table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
        table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
        return table;
    }
}

检查here 以获取DataSet.WriteXml() 和here 以获取DataSet.ReadXml();

【讨论】:

  • 感谢重播。不幸的是,这个示例显示了我实际执行的 XML 读取。这些数据集通常不是强类型数据集 - 它们没有每个表的特殊属性:link
  • 你在 msdn 中检查过 DataSet.WriteXml(); 和 DataSet.ReadXml();
  • 据我了解,我无法使用标准方法 WriteXML 和 ReadXML 导出/导入强类型,对吧?
【解决方案2】:

解决方案:

WriteXml:

                ConfigDataSet.WriteXml(FileName);

ReadXml:

                    using (DataSet ds = new DataSet())
                {
                    ds.ReadXml(FileName);
                    ConfigDataSet.Load(ds.Tables[0].CreateDataReader(), LoadOption.OverwriteChanges, ConfigDataSet.TableName1);
                    ConfigDataSet.Load(ds.Tables[1].CreateDataReader(), LoadOption.OverwriteChanges, ConfigDataSet.TableName2);
                    ConfigDataSet.Load(ds.Tables[2].CreateDataReader(), LoadOption.OverwriteChanges, ConfigDataSet.TableName3);
                    ConfigDataSet.Load(ds.Tables[3].CreateDataReader(), LoadOption.OverwriteChanges, ConfigDataSet.TableName4);
                }

需要单独加载每个表,但比逐行加载每个字段要好。

问候,库巴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多