我有一个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
请注意,要使其正常工作,主键字段必须具有匹配的数据类型和名称。如果数据类型不匹配,则会收到一条正确的错误消息。但是,如果名称不匹配,则抛出一个不可描述的空引用异常。微软本可以在那里做得更好。
这意味着,在合并数据表之前,我建议重命名
usnr
或usid
。关于c# - 数据集表中是否可以填充来自两个来源的数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36935170/