我有一个DataSet并从其中两个来源读取数据。一个表来自XML文件,另一个表来自Firebird SQL数据库。我只想得到一个表,它包含xml文件中的所有列和一个表中sql数据中的一些字段。两个表中都有相同的唯一键字段,因此可以很容易地将其合并。我想将此表的所有字段绑定到窗体上的字段。
是否有可能像所描述的那样,或者我没有看到有一个更简单的方法来解决我的问题?
编辑:
以显示我试图做的一些额外的代码。

DataSet dataSet = new DataSet();

DataTable table1 = new DataTable("test1", "test1");
table1.Columns.Add("id");
table1.Columns.Add("name");
table1.Columns[0].Unique = true;

table1.Rows.Add(new object[2] { 1, "name1" });
table1.Rows.Add(new object[2] { 2, "name2" });

DataTable table2 = new DataTable("test2", "test2");
table2.Columns.Add("id");
table2.Columns.Add("thing");
table2.Columns[0].Unique = true;

table2.Rows.Add(new object[2] { 1, "thing1" });
table2.Rows.Add(new object[2] { 2, "thing2" });

dataSet.Tables.Add(table1);
dataSet.Tables[0].Merge(table2, false);

当我运行这个代码时,我得到一个ConstraintException。当我删除id字段上的unique时,它会用所有需要的列填充列表,但一行包含table1中的数据,另一行包含table2数据。如何合并它们?
编辑2:
我尝试在实时数据中使用primarykey解决方案,如下所示。
xmlData.Tables[0].PrimaryKey = new[] { xmlData.Tables[0].Columns["usnr"] };
dbData.PrimaryKey = new[] { dbData.Columns["usid"] };
xmlData.Tables[0].Merge(dbData, true, MissingSchemaAction.Add);

xmldata是一个来自xml文件的DataSet。它有id、usnr和其他一些字段。db data是一个DataTable和来自db的数据,它有id、usid、name和其他一些字段。id字段与我的数据无关。当我使用GetType()测试时,usnr和usid字段都是表中的字符串。
当我现在添加xmlData.Tables[0].Merge(dbData, true, MissingSchemaAction.Add);时,它抛出一个DataException
<target>.ID and <source>.ID have conflicting properties: DataType property mismatch.

在写这篇文章的时候,我意识到两个表中的id字段不同,但我无论如何都不需要它们,所以在更改primarykey条目和合并之前删除了列。现在我得到了一个没有更多信息的NullReferenceException。这些表都很好,里面有数据,现在哪里会有异常呢?

最佳答案

而不是。。。

table1.Columns[0].Unique = true;
table2.Columns[0].Unique = true;

…添加以下行:
table1.PrimaryKey = new[] { table1.Columns[0] };
table2.PrimaryKey = new[] { table2.Columns[0] };

因为merge命令需要知道数据表的主键。仅仅指出哪些列是唯一的是不够的。对于主键,输出将是:
id name  thing
== ===== ======
1  name1 thing1
2  name2 thing2

请注意,要使其正常工作,主键字段必须具有匹配的数据类型和名称。如果数据类型不匹配,则会收到一条正确的错误消息。但是,如果名称不匹配,则抛出一个不可描述的空引用异常。微软本可以在那里做得更好。
这意味着,在合并数据表之前,我建议重命名usnrusid

关于c# - 数据集表中是否可以填充来自两个来源的数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36935170/

10-11 01:51
查看更多