我无法弄清楚为什么我得到“DataTable已经属于另一个DataSet”的例外。
这是我的代码:
DataSet AlertSet = new DataSet();
DataTable generalAlertData = new DataTable("GeneralAlertData");
generalAlertData = //function that returns datatable
//throws exception
AlertSet.Tables.Add(generalAlertData)
何时创建另一个数据集以及何时添加generalAlertData数据表?
我尝试使用稍微不同的语法来创建和添加表并得到相同的错误:
DataSet AlertSet = new DataSet();
DataTable generalAlertData = //function that returns datatable
//throws exception
AlertSet .Tables.Add(generalAlertData);
答案 0 :(得分:7)
这取决于检索数据表的功能。
如果该函数使用DataAdapter
并填充数据集,那么您将自动分配表的DataSet
属性,并且在分配不同的DataSet之前需要将其删除
您可以尝试删除原始DataSet并使用您自己的
DataTable generalAlertData = GetTable();
DataSet u = generalAlertData.DataSet;
u.Tables.Remove(generalAlertData.TableName);
AlertSet.Tables.Add(generalAlertData);
因此,如果您的假设GetTable
以这种方式运作
public DataTable GetTable()
{
...
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds.Tables[0];
}
然后将DataSet分配给返回的数据表
相反,此代码不会为DataSet
属性
public DataTable GetTable()
{
...
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
答案 1 :(得分:2)
方法调用返回的DataTable
已添加到DataSet
。确保它没有添加到DataSet
;只是建立一个独立的DataTable
。
作为旁注,从分配给此的方法调用返回DataTable
会使其上方的行无关紧要(new
)。
答案 2 :(得分:0)
这是一个古老的问题,但也许这个答案可以帮助其他人。
我也收到了这个错误。我查看了我的源代码,发现几乎没有其他数据集,并且对于为什么会发生这种情况感到困惑。
我的问题的解决方案是在我的数据访问库中。它没有“getDataTable”例程,但我确实有一个getDataset例程。当我只需要一个数据表时,我调用了getDataset并获取了表(0)数据表实例。
这样做的最终结果是我按照自己的意愿收回了数据表,但是数据表已经是我的数据访问调用返回的数据集的一部分。因此,错误。
我必须在我的数据访问库中添加一个getDatatable例程来消除这个问题。
答案 3 :(得分:0)
我遇到了同样的问题,我使用Remove
解决了这个问题。在我看来,您的代码可能就是这样:
DataSet AlertSet = new DataSet();
DataTable generalAlertData = new DataTable("GeneralAlertData");
AlertSet.Tables.Add(generalAlertData);
AlertSet.Tables.Remove(generalAlertData);
如果此代码有效,请告诉我。
我的工作代码是这样的:
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();
}
每次单击按钮buttonSave
时,都会显示消息“DataTable已经属于另一个DataSet”。编写行代码myDataSet.Tables.Remove(myTable);//This works
后,应用程序开始运行没有问题,现在我可以单击按钮更多次,不会丢失myTable
的值而没有错误消息。
我希望这可以提供帮助。