Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Datatable.Merge不';行不通_C#_Datatable_Merge - Fatal编程技术网

C# Datatable.Merge不';行不通

C# Datatable.Merge不';行不通,c#,datatable,merge,C#,Datatable,Merge,执行此代码对象后的原因:表中的行仅包含表2中的值,并且未按应有的方式合并。这些表必须具有相同的结构,因为我的程序需要它 编辑1 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); 即使我以

执行此代码对象后的原因:表中的行仅包含表2中的值,并且未按应有的方式合并。这些表必须具有相同的结构,因为我的程序需要它

编辑1

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.Copy()
而不是
Data.Clone()

从MSDN:

复制复制此数据表的结构和数据

克隆克隆数据表的结构,包括所有数据表架构 和约束


您需要使用
Table.Copy()
而不是
Data.Clone()

从MSDN:

复制复制此数据表的结构和数据

克隆克隆数据表的结构,包括所有数据表架构 和约束


问题是您遇到了主键冲突

    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
,请将第二行更改为
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
,请将第二行更改为
1
,它应该可以工作。

请显示CreateTableStucture()方法。这些表必须具有相同的结构,但在第一个表中插入3列,在第二个表中插入4列,请显示CreateTableStructureTry Table.Merge(Table_2,false,MissingSchemaAction.Add)的代码。为什么克隆的表比原始表多出一列?因为其余的列会自动填充dbnulls,所以此表最初有11列。很抱歉,我不能向您展示这个方法,因为有几个方法创建了这个表,它们工作得很好,因为它们经过了数千次的测试。您能展示一下您的CreateTableStucture()方法吗?这些表必须具有相同的结构,但在第一个表中插入了3列,在第二个表中插入了4列,请显示CreateTableStructureTry Table.Merge(Table_2,false,MissingSchemaAction.Add)的代码。为什么克隆的表比原始表多出一列?因为其余的列会自动填充dbnulls,所以此表最初有11列。很抱歉,我不能给你们展示这个方法,因为有几个方法创建了这个表,它们工作得很好,因为它们被测试了数千次。我认为你们没有抓住要点。OP需要合并而不是复制第一个上的第二个确实我误解了这个问题。我认为OP创建了DataTable,克隆到DataTable2,添加了行,然后尝试将空DataTable与DataTable2合并。我认为您没有抓住要点。OP需要合并而不是复制第一个上的第二个确实我误解了这个问题。我认为OP创建了DataTable,克隆到DataTable2,添加了行,然后尝试将空DataTable与DataTable2合并。我知道这一定是一个键冲突。此代码必须用表_2中的相应值覆盖表中的每个值(仅当表_2中的值!=DBNULL时)。是否可以通过merge来实现这一点,或者我必须编写自己的方法?不,不能使用merge。Merge是为向表中添加额外的行而设计的,而不是修改表中现有的行。我知道这一点,它必须是一个键冲突。此代码必须用表_2中的相应值覆盖表中的每个值(仅当表_2中的值!=DBNULL时)。是否可以通过merge来实现这一点,或者我必须编写自己的方法?不,不能使用merge。“合并”旨在向表中添加其他行,而不是修改表中的现有行。