2010-08-11 12 views
2

J'utilise Calculer pour additionner une donnée qui a une condition. Parfois, il n'y a pas de lignes à l'intérieur du datatable correspondant à mes critères, donc je reçois une exception sur le calcul L'objet ne peut pas être transtypé de DBNull vers d'autres types.Comment vérifier si datatable contient des lignes correspondantes?

Existe-t-il un moyen de vérifier/filtrer la datatable pour voir si elle a les lignes désirées, si oui seulement alors j'applique Calculer. Veuillez nous conseiller

total = Convert.ToDecimal(CompTab.Compute("SUM(Share)", "IsRep=0")); 

Répondre

3

essayer cette

object objCompute=CompTab.Compute("SUM(Share)", "IsRep=0"); 
if(objCompute!=DBNull.Value) 
{ 
total = Convert.ToDecimal(objCompute); 
} 
2

D'abord, affectez la valeur à un objet, qui peut rester en sécurité et testé pour des valeurs nulles. Deuxièmement, utilisez TryParse() s'il y a des chances que cela ne fonctionne pas (ce qui est probablement trop dans ce scénario ... La fonction Compute se traduira toujours soit par rien, soit par quelque chose qui peut être converti .. Mais je déjà tapé le code, donc je vais le garder. Et c'est juste une bonne habitude.)

object oTotal = CompTab.Compute("Sum(share)", "IsRep=0"); 
Decimal total; 
if(oTotal != null) 
{ 
    if(!System.Decimal.TryParse(oTotal.ToString(), out total)) 
    { 
     // whatever logic you need to include if the TryParse fails. 
     // Should never happen in this case. 
    } 
} 
+0

Merci David. C'était très utile. –

+0

Hey, il dit «Opérateur»! ne peut pas être appliqué à l'opérande de type 'objet' '. –

+0

Que faire si j'utilise total = Convert.ToDecimal (dtSum) ?? 0; au lieu de tryparse? –

Questions connexes