Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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已属于另一个数据集;_C#_Asp.net_Exception_Datatable_Dataset - Fatal编程技术网

C# &引用;DataTable已属于另一个数据集;

C# &引用;DataTable已属于另一个数据集;,c#,asp.net,exception,datatable,dataset,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(generalAlert

我不明白为什么会出现“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);

从方法调用返回的
数据表
被添加到
数据集
。确保未将其添加到
数据集
;只需构建一个独立的
数据表


作为旁注,从分配给该表的方法调用返回
数据表
,使其上方的行不相关(新的
取决于检索数据表的函数所做的操作。
如果该函数使用
DataAdapter
并填充数据集,则自动分配表的
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
属性

public DataTable GetTable()
{
    ...
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    da.Fill(dt);
    return dt;
}

这是一个老问题,但也许这个答案会帮助其他人

我也收到了这个错误。我仔细查看了我的源代码,没有发现任何其他数据集,对为什么会发生这种情况感到困惑

我的问题的解决方案在我的数据访问库中。它没有“getDataTable”例程,但我有一个getDataset例程。当我只需要一个datatable时,我调用getDataset并获取tables(0)datatable实例

这样做的最终结果是,我得到了我想要的datatable,但datatable已经是从数据访问调用返回的数据集的一部分。因此,这是一个错误


我必须在我的数据访问库中添加一个getDatatable例程来消除这个问题。

我也遇到了同样的问题,我使用
删除
解决了这个问题。在我看来,您的代码可能是:

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已属于另一个数据集”。在写入行代码
myDataSet.Tables.Remove(myTable)后//这是可行的
应用程序开始运行时没有出现问题,现在我可以多次单击该按钮,而不会丢失
myTable
的值,也不会显示错误消息


我希望这能有所帮助。

对不起,
myDataSet.Tables.Remove(myTable);//这是有效的
行代码(在我上面的代码中)必须在
myDataSet.WriteXml(“myTable.xml”);
我确认代码有效。