厳密に型指定された DataTable の列に値を代入すると、StrongTypingException が発生する理由を教えてください。(DBNull値で列を読み取ると、なぜそれが得られるのか理解しています)
以下の例では、ある DataTable から別の DataTable に値を代入しようとしています (例のすべての列はInt32 型です)。「newOrderRow.items」列に値を割り当てることができますが、「newOrderRow.debcode」列で同じことを行うと、例外がスローされます! どうして?!
私がこれまでに試したことのいくつか (運がなかっ
た
)
:orderrows のテーブルを DBNull から -1 に変更しても、依然として例外がスローされ、DBNull であると表示されます !!!
myDataSet.orderrowsRow newOrderRow;
foreach (MyDataSet.calclinesRow calclineRow in myDataSet.calclines)
{
newOrderRow = myDataSet.orderrows.NeworderrowsRow(); //Create new 'orderrows' row
//Assign values from one DataTable to another
if (!calclineRow.IsitemsNull())
newOrderRow.items = calclineRow.items; //calclineRow.items == 1. Assignment successful
if (!calclineRow.IsdebcodeNull())
newOrderRow.debcode = calclineRow.debcode; //calclineRow.debcode == 556. Assignment raises System.Data.StrongTypingException ! (See message below)
myDataSet.orderrows.AddorderrowsRow(newOrderRow);
}
/*Exception Message:
=====================
System.Data.StrongTypingException: The value for column 'debcode' in table 'orderrows' is DBNull.
---> System.InvalidCastException: Specified cast is not valid.
at MyProject.MyDataSet.orderrowsRow.get_debcode() in Q:\MyProjFolder\DataSets\MyDataSet.Designer.cs:line 21680
*/