数据集复制操作后对行的c#访问引发类型为'的异常;System.ArgumentException';

数据集复制操作后对行的c#访问引发类型为'的异常;System.ArgumentException';,c#,dataset,C#,Dataset,我有一个包含几个强类型数据表的数据集。我使用复制操作将架构和数据复制到新数据集,如下所示: DataSet dsNew = dsOld.Copy(); EmployeeDataTable dtEmpl = (EmployeeDataTable) dsNew.Tables["Employee"]; string sColName = dtEmpl.Columns[0].ColumnName; // this line correctly assigns 'EmployeeId' to sColN

我有一个包含几个强类型数据表的数据集。我使用复制操作将架构和数据复制到新数据集,如下所示:

DataSet dsNew = dsOld.Copy();

EmployeeDataTable dtEmpl = (EmployeeDataTable) dsNew.Tables["Employee"];
string sColName = dtEmpl.Columns[0].ColumnName; // this line correctly assigns 'EmployeeId' to sColName

EmployeeRow row = dtEmpl[0];
int id = row.EmployeeId;

最后一行抛出类型为“System.ArgumentException”的异常

要在异常处理中访问objet,请按以下方式编写代码:

DataSet dsNew = dsOld.Copy();
try
{
... your code ...
}
catch(Exception Ex)
{
 ... here you can access dsNew ...
}

请尝试按名称访问该列

像这样:

int id = (int)row["EmployeeId"];`
如果这不起作用,请查看
dtemp.columns
集合,确保表中的列正确


出现问题的原因可能是您正在复制数据集并处理副本而不是原始数据集。如果是这种情况,那么使用索引器而不是属性访问列可能会起作用。

异常的消息是什么?“System.ArgumentException:列'EmployeeId'不属于表Employee”。使用DTemp上的DataSet Visualizer可正确显示所有表数据!我不是问如何处理抛出的异常。我只是不明白为什么首先抛出异常。在DTemp上使用DataSet Visualizer可以正确显示所有表数据。这正是我正在做的:制作数据集的副本,然后处理副本。如果你不能做到这一点,那么首先制作数据集副本有什么意义呢?我猜你遇到了与这里描述的相同的问题:这是一个类似的问题。您提到的线程引用了一个强类型数据集,并试图通过命名表链接访问其数据表。我的帖子提到了强类型数据表和使用properties.Rune访问表字段的尝试,如果我尝试通过索引操作符访问列,它会起作用。尽管如此,问题仍然是为什么复制操作会破坏所有datatable属性。如果查看DataSet()的copy方法,您将看到它返回的是一个DataSet,而不是一个类型化的DataSet。因此,您可以尝试强制转换Copy方法的返回值,看看这是否有效。