删除强类型数据集中的列时出错?

Posted

技术标签:

【中文标题】删除强类型数据集中的列时出错?【英文标题】:Error when removing column in strongly-typed dataset? 【发布时间】:2012-09-20 03:20:44 【问题描述】:

当我将数据检索到我的DataSet 中时,year 列是我的DataSet 中的第三列。使用后我不需要此列,因此我使用Remove 方法将其删除,并将列名称传递给Remove 方法。问题是我在foreach 循环中检索数据,所以当我再次检索数据时,year 列现在是DataSet 中的最后一列,当我尝试访问它时,它会引发错误说year 未找到列。我的解决方法是通过DataSet 克隆到DataTable,然后将数据集中的每一行导入我的DataTable,但是有没有更有效的方法或方法可以将year 列保留在其中原来的位置。

private int GetData()

    dataSet.GetExportData();

    DataTable dt = dataSet.ExportData;

    for(int i = 0; i <dataSet.ExportData; i++)
    
        //Do Stuff
    

    dataSet.Columns.Remove(dataSet.ExportData.YearColumn.ColumnName);   

在上面的代码中,当我打开一个对话框并选择要导出的数据时,它第一次可以工作,但是如果我让对话框保持打开状态并再次单击按钮进行导出,则会引发错误。如果我关闭对话框并重新打开,它工作正常。正如我之前所说,我注意到当它再次通过dataSet.GetExportData() 单击按钮检索数据时,它将Year 列作为最后一列,而不是强类型DataSet 中的定义位置,我认为这是问题,但除了克隆和导入之外,不知道如何解决它。

【问题讨论】:

您是否尝试在 foreach 循环中删除该列,并再次检索该列的值?你能发布一些代码吗? @CjCoax - 是的,我现在没有代码,但稍后会发布,但你说的正是我正在做的。 【参考方案1】:

最好发表评论,但我想利用代码样式,而且如果不看代码也很难说出你想要实现的目标,

    foreach (DataRow row in myTable.Rows)
    
        //do something with year column 
        myTable.Columns.Remove("year");
    

上面的代码在第一次迭代中运行良好,但之后会失败,因为myTable.Columns.Remove("year") 会从表中删除整个列,而不仅仅是从当前行中,并为您提供:You'll get Column 'year' does not belong to table Table.exception。

为什么不将myTable.Columns.Remove("year"); 排除在 foreach 之外呢?

    foreach (DataRow row in myTable.Rows)
    
        //do something with year column 
    

    myTable.Columns.Remove("year");

【讨论】:

抱歉,我很快就联系上了。在foreach循环中没有检索到数据,我将发布一些代码。

以上是关于删除强类型数据集中的列时出错?的主要内容,如果未能解决你的问题,请参考以下文章

检索 HIVE“TIMESTAMP”列上的列时出错

在强类型数据集中添加新行?

获取 Apache spark 数据集中包含的列的列数据类型

以编程方式更改 .net 强类型数据集中的表名

从监督学习数据集中删除列时的奇怪值

c# 强类型数据集,其表适配器未返回预期结果