“DataTable已经属于另一个DataSet”

时间:2013-12-04 15:27:33

标签: c# asp.net exception datatable dataset

我无法弄清楚为什么我得到“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);

4 个答案:

答案 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的值而没有错误消息。

我希望这可以提供帮助。