任何人都可以告訴我爲什麼在將值賦值給強類型DataTable中的列時,爲什麼會出現StrongTypingException? (我明白爲什麼我得到它,如果我要讀取具有DBNull值的列)設置列值時的StrongTypingException
在下面的示例中,我試圖將一個DataTable中的值分配給另一個DataTable(示例中的所有列都是類型Int32)。我可以給'newOrderRow.items'列賦值,但是當我對'newOrderRow.debcode'列做同樣的操作時,拋出異常!爲什麼?!
一些到目前爲止我試過的東西(沒有任何的運氣):
- 分配硬編碼值,而不是「calclineRow.debcode」
- 分配另一個之前調用newOrderRow.SetdebcodeNull()值
- 將'orderrows'表中的'debcode'列的DefaultValue屬性從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
*/
不,那不是我的問題所在。問題是'calclineRow.debcode'不是DBNull。它的值爲556,但是當我嘗試將該值賦給'newOrderRow.debcode'時,程序抱怨'newOrderRow.debcode'是DBNull。 (當然這是,這就是爲什麼我試圖給它賦值!愚蠢的.NET!) – Kberg 2013-03-12 15:23:20
爲什麼你總是在循環中重寫'newOrderRow'?不要「重複使用」外部變量,而是在循環中創建它。 'orderrows newOrderRow = myDataSet.orderrows.NeworderrowsRow();'我不確定這是否會導致問題。而且你必須在DataTable中添加新行,因爲NeworderrowsRow並不是隱含的。 – 2013-03-12 15:28:16
我不確定我明白你的意思。增加了更多的代碼來澄清。無論如何,這與我們在此討論的實際問題並無多大關係。 – Kberg 2013-03-12 15:47:18