gpt4 book ai didi

c# - 使用 dataset.readxml 在数据表中定义嵌套关系

转载 作者:数据小太阳 更新时间:2023-10-29 02:10:32 25 4
gpt4 key购买 nike

我想使用 dataset.readXML(filename) 将我的 xml 读入数据集

想法是加载 2 个表,然后使用 LINQ 连接它们并将查询结果转储到 sql 数据库中。

我有以下 xml

<Report>
<Parameters>
<Code>ABC</Code>
<Expiries>
<date>2000-01-01</date>
<time>08:00:00</time>
<reason>The guy liked cake</reason>
</Expiries>
<Expiries>
<date>2002-01-01</date>
<time>08:00:00</time>
<reason>The guy still liked cake</reason>
</Expiries>
</Parameters>
<Parameters>
<Code>BCA</Code>
<Expiries>
<date>2000-01-01</date>
<time>08:00:00</time>
<reason>The guy liked cake</reason>
</Expiries>
<Expiries>
<date>2002-01-01</date>
<time>08:00:00</time>
<reason>The guy still liked cake</reason>
</Expiries>
</Parameters>
</Report>

我这样定义数据表:(addcolumn 是一种添加列的便捷方法)

public DataTable Parameters = new DataTable("Parameters")
.addColumn<string>("Code")

public DataTable Expiries = new DataTable("Parameters")
.addColumn<string>("date")
.addColumn<string>("time")
.addColumn<string>("reason")

然后我使用以下方法将它导入到表中:

DataSet tds = new DataSet()
tds.Tables.add(Parameters);
tds.Tables.add(Expiries);

tds.ReadXML(file.FullName)
//now a record on tds.tables["Parameters"] will have Code="ABC"

这一切都非常出色,但它抛弃了我的过期时间和我的参数之间的关系。如果我在不使用定义的列的情况下这样做,它将自动在 2 个表之间创建关系,例如

DataSet tds = new DataSet()

tds.ReadXML(file.FullName)
//now a record on tds.tables["Parameters"] will have Code="ABC", Parameter_Id=0

我如何在数据表定义中定义这种关系,以便它模仿自动生成的模式所具有的内容?

最佳答案

假设代码是唯一的,您可以执行以下操作:

        DataSet custom = new DataSet();
DataTable Parameters = new DataTable("Parameters")
.AddColumn<string>("Code");

DataTable Expiries = new DataTable("Expiries")
.AddColumn<string>("Code")
.AddColumn<string>("date")
.AddColumn<string>("time")
.AddColumn<string>("reason");
custom.Tables.Add(Parameters);
custom.Tables.Add(Expiries);
custom.Relations.Add(new DataRelation("ParameterExpiries", Parameters.Columns["Code"], Expiries.Columns["Code"]));
custom.Relations["ParameterExpiries"].Nested = true;

这将为您提供一个过期表,其中包含父级定义的代码

如果 Code 不是唯一的,那么您可以在 Parameters 中创建另一列,即 AutoIncrement=true(例如“ID”),并在父子关系中使用它。然后在使用表达式“Parent.Code”的 Expiries“Code”中添加另一列。

        DataSet custom = new DataSet();
DataTable Parameters = new DataTable("Parameters")
.AddColumn<string>("Code")
.AddColumn<int>("ID");
Parameters.Columns["ID"].AutoIncrement = true;

DataTable Expiries = new DataTable("Expiries")
.AddColumn<int>("ID")
.AddColumn<string>("Code")
.AddColumn<string>("date")
.AddColumn<string>("time")
.AddColumn<string>("reason");
custom.Tables.Add(Parameters);
custom.Tables.Add(Expiries);
custom.Relations.Add(new DataRelation("ParameterExpiries", Parameters.Columns["ID"], Expiries.Columns["ID"]));
custom.Relations["ParameterExpiries"].Nested = true;
Expiries.Columns["Code"].Expression = "Parent.Code";

表达式见:http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression(v=vs.110).aspx

有关数据关系,请参阅:http://msdn.microsoft.com/en-us/library/system.data.datarelation(v=vs.110).aspx

关于c# - 使用 dataset.readxml 在数据表中定义嵌套关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25168355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com