-4

なぜ私が得たのか誰か説明できます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

temp1 と temp2 の DataSet Visualizer では、データが存在することがわかりますが、t1 の場合は例外が発生し、temp1 のコピーを作成すると正常に動作します (temp2 を参照)。

4

1 に答える 1

1

私の質問に対する答えが見つかりました。これは、型指定されたデータセットを別のデータセットにマージし、ターゲット データセットに型指定されたテーブルが含まれていない場合に発生します。例えば:

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 に空の型指定された dataTable を追加してから、merge を呼び出す必要があります。

var targetDataSet = new SomeTypedDataset();
targetDataSet.Tables.Add(new SomeTypedDataTable());
targetDataSet.Merge(sourceDataSet);
于 2013-04-19T14:15:18.323 に答える