c# dataRow访问抛出System.ArgumentException

本文关键字:System ArgumentException dataRow 访问 | 更新日期: 2023-09-27 18:08:09

谁能解释一下为什么我得到了System.ArgumentException ?代码:

var dsResult = new SecurityYieldsData();//DataSet
var syData = (SecurityYieldsData)base.PrepareCAData(ctx, swiftMessage, caData);
SecurityYieldOptionsData optionsData = GetCaOption(ctx, syData.SecurityYields[0], message.Body);
syData.Merge(optionsData);
dsResult.Merge(syData);
var temp1 = (SecurityYieldOptionsData.SecurityYieldOptionsDataTable)manager.SecurityYieldOptions().GetTable(dsResult);
var temp2 = (SecurityYieldOptionsData.SecurityYieldOptionsDataTable)manager.SecurityYieldOptions().GetTable(dsResult).Copy();
int t1 = temp1[0].OptionNumber;//'temp1[0].OptionNumber' threw an exception of type 'System.ArgumentException'
int t1_1 = Convert.ToInt32(temp1[0]["OptionNumber"]);// Ok
int t2 = temp2[0].OptionNumber;// Ok
int t3 = optionsData.SecurityYieldOptions[0].OptionNumber;// Ok

在DataSet Visualizer从temp1和temp2我可以看到数据存在,但在情况t1我得到了异常,如果创建temp1的副本,它工作得很好(见temp2)。

c# dataRow访问抛出System.ArgumentException

我找到了问题的答案。当您将类型化数据集合并到另一个数据集并且目标数据集不包含类型化表时,就会发生这种情况。例如:

var sourceDataSet = new SomeTypedDataset();
var strongTypedTable = new SomeTypedDataTable()
sourceDataSet.Tables.Add(strongTypedTable );
var targetDataSet = new SomeTypedDataset();
targetDataSet.Merge(sourceDataSet);// at that step targetDataSet will contains strongTypedTable byt this DataTable is not strong-typed

如果你需要保存在targetDataSet中使用强类型数据表的能力,你需要在targetDataSet中添加空类型数据表,然后调用merge

var targetDataSet = new SomeTypedDataset();
targetDataSet.Tables.Add(new SomeTypedDataTable());
targetDataSet.Merge(sourceDataSet);