Quelqu'un peut-il me dire pourquoi je reçois une exception StrongTypingException lors de l'affectation d'une valeur à une colonne dans un DataTable fortement typé? (Je comprends pourquoi je l'obtiens si je devais lire la colonne avec la valeur DBNull)StrongTypingException lors de la définition de la valeur de colonne
Dans l'exemple ci-dessous, j'essaie d'attribuer une valeur d'un DataTable à un autre (toutes les colonnes de l'exemple sont de type Int32). Je peux assigner une valeur à la colonne 'newOrderRow.items' mais quand je fais la même chose avec la colonne 'newOrderRow.debcode' une exception est levée! Pourquoi?!
Certaines des choses que j'ai essayé jusqu'à présent (sans chance):
- Assignez valeur codée en dur au lieu de « calclineRow.debcode »
- Appel newOrderRow.SetdebcodeNull() avant d'attribuer une autre valeur
- Modification de la propriété DefaultValue sur la colonne 'debcode' dans la table 'orderrows' de DBNull à -1 et il STILL jette encore l'exception et dit que c'est 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
*/
Non, ce n'est pas où mon problème est. Le problème est que 'calclineRow.debcode' n'est PAS DBNull. Il a une valeur de 556 mais quand j'essaye d'assigner cette valeur à 'newOrderRow.debcode' le programme se plaint de 'newOrderRow.debcode' est DBNull. (Ce qui bien sûr, c'est pourquoi j'essaie de lui assigner une valeur! Stupid .NET!) – Kberg
Pourquoi remplacez-vous toujours 'newOrderRow' dans la boucle? Au lieu de "réutiliser" une variable externe, créez-la dans la boucle. 'orderrows newOrderRow = myDataSet.orderrows.NeworderrowsRow();' Je ne suis pas sûr si cela cause le problème. Et vous devez ajouter une nouvelle ligne à 'DataTable' car' NeworderrowsRow' ne le fait pas implicitement. –
Je ne suis pas sûr de comprendre ce que vous voulez dire. Ajouté un peu plus du code pour clarifier.Quoi qu'il en soit, cela n'a pas grand chose à voir avec le problème que nous discutons ici. – Kberg