DataTable已经属于另一个DataSet

kbv*_*hnu 40 .net vb.net datatable

将数据集中的一个数据表添加到另一个数据集时会发生此错误."DataTable已经属于另一个DataSet."

dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues
(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))
Run Code Online (Sandbox Code Playgroud)

Jay*_*ggs 81

与其他响应一样,您看到的错误是因为您尝试添加到DataSet的DataTable已经是不同DataSet的一部分.

一种解决方案是复制 DataTable并将副本分配给另一个DataSet.

dtCopy = dataTable.Copy()
ds.Tables.Add(dtCopy)
Run Code Online (Sandbox Code Playgroud)

复制的DataTable将具有复制的DataTable的结构和数据.

如果您只想要DataTable的结构,请改为调用Clone.

dtCopy = dataTable.Clone()
Run Code Online (Sandbox Code Playgroud)

  • 复制有很多开销......请参阅下面的Nathaniel Layton的答案以获得更好的解决方案. (4认同)

小智 33

接受的答案不是很好.克隆应始终是最后一个选项.

这是解决问题的方法,而不会产生克隆的开销.

        DataSet ds = GetData1();

        DataSet ds2 = GetData2();

        //Assuming you know you've got good data

            DataTable dt = ds2.Tables[0];
            ds2.Tables.Remove(dt);
            dt.TableName = "PortedTable";//you may need to change the table name to prevent conflicts
            ds.Tables.Add(dt);
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案......副本有很多开销. (3认同)