C# &引用;DataTable已属于另一个数据集;
我不明白为什么会出现“DataTable已经属于另一个DataSet”异常 这是我的密码: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
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”);
我确认代码有效。