DataTable Table = CreateTableStucture();
DataTable Table_2 = Table.Clone();
Table.Rows.Add(0, "A", "B");
Table_2.Rows.Add(0, DBNull.Value, DBNull.Value, "C");
Table.Merge(Table_2);
为什么在执行此代码对象之后:Table的行只包含来自Table_2的值,并且它没有按原样合并。这些表必须具有相同的结构,因为我的程序需要它。
编辑1。
DataTable Table = new DataTable("table");
DataColumn KeyCol = new DataColumn("Key", typeof(int));
DataColumn Col1 = new DataColumn("col1", typeof(string));
DataColumn Col2 = new DataColumn("col2", typeof(string));
DataColumn Col3 = new DataColumn("col3", typeof(string));
DataColumn Col4 = new DataColumn("col4", typeof(string));
DataColumn Col5 = new DataColumn("col5", typeof(string));
Table.Columns.Add(KeyCol);
Table.Columns.Add(Col1);
Table.Columns.Add(Col2);
Table.Columns.Add(Col3);
Table.Columns.Add(Col4);
Table.Columns.Add(Col5);
Table.Constraints.Add("keyCon", KeyCol, true);
DataTable Table_2 = new DataTable();
Table_2 = Table.Clone();
Table.Rows.Add(0, "A", "B");
Table_2.Rows.Add(0, DBNull.Value, DBNull.Value, "C");
Table.Merge(Table_2);
即使我以这种方式创建它也不起作用。
答案 0 :(得分:3)
问题是你遇到了主键冲突。
DataColumn KeyCol = new DataColumn("Key", typeof(int));
//...
Table.Constraints.Add("keyCon", KeyCol, true);
//...
Table.Rows.Add(0, "A", "B");
Table_2.Rows.Add(0, DBNull.Value, DBNull.Value, "C");
对于这两行,您有一个0
的主键,将第二行更改为1
,它应该可以正常工作。
答案 1 :(得分:1)
您需要使用Table.Copy()
代替Data.Clone()
来自MSDN:
DataTable.Copy复制此DataTable的结构和数据。
DataTable.Clone克隆DataTable的结构,包括所有DataTable模式 和约束。