DataTable已经属于另一个DataSet

在将数据集中的一个数据集添加到另一个数据集时发生此错误。“DataTable已经属于另一个DataSet”。

dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues (dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0)) 

就像其他响应指出的那样,你看到的错误是因为你试图添加到DataSet的DataTable已经是不同DataSet的一部分。

一种解决scheme是复制 DataTable并将副本分配给另一个DataSet。

 dtCopy = dataTable.Copy() ds.Tables.Add(dtCopy) 

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

如果您只想要DataTable的结构,请调用Clone 。

 dtCopy = dataTable.Clone() 

被接受的答案不是很好。 克隆应该永远是最后的select。

这是解决问题的一种方法,不会产生克隆的开销。

  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); 

尝试调用这个方法:

DataTable dt = dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0).Clone()

这将创build一个DataTable的副本并将其分配给目标DataSet

ds.Tables.Add(dt)

我猜这意味着DataTable属于另一个DataSet …

您可以将DataTable序列化为XML,然后将其反序列化到您的目标DataSet中。

我想你应该创build一个新的DataTable,并将结构和数据导入到新的。

如果它不是一个types化的数据集,请尝试使用DataTable.Copy()方法复制表。 此方法创build同一个表的新实例,因此它不属于任何DataSet:

昏暗的新表作为DataTable = oldTable.Copy()昏暗的DV作为DataView = newTable.DefaultView

dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues(dv.ToTable.DefaultView.ToTable(False,strSelectedCols))。Tables(0))

我有同样的问题,我解决了它使用Remove 。 在我看来, 你的代码可能是这样的:

 dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues (dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0)) dsformulaValues.Tables.Remove(//I'm not sure to understand your code, so read this code line as only an input for your stuff. Please, consider my code below for more understanding. 

我的工作代码是这样的:

 DataTable myTable = new DataTable(); private void Save() { DataSet myDataSet = new DataSet(); myDataSet.Tables.Add(myTable); myDataSet.Tables.Remove(myTable);//This works myDataSet.WriteXml("myTable.xml"); } private void buttonSave_Click(object sender, EventArgs e) { Save(); } 

每次我点击buttonSavebutton,就会出现“DataTable已经属于另一个DataSet”的消息,写完行代码myDataSet.Tables.Remove(myTable);//This works程序开始运行,没有问题,现在我可以点击button多次,而不会丢失myTable的值,也不会显示错误消息。

我希望这可以帮助。

我发现一个转身,我希望它可以帮助

 _DataTable.TableName = _TableName If _DataTable.DataSet IsNot Nothing Then _DataSet = _DataTable.DataSet Else _DataSet = New DataSet _DataSet.Tables.Add(_DataTable) End If 

不知何故,即使_DataTable是新的,但是如果它引用了一个先前加载的物理表,那么DataTable就会inheritance前面的configuration。

简单的方法就是将表格合并如下。

dsformulaValues.Merge(m_DataAccess.GetFormulaValues(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))