“L'objet ne peut pas être lancé à partir de DBNull à d'autres types de”

Lors de mon site web à la suite de bits de code, il tombe avec une exception comme suit:

Système.InvalidCastException: l'Objet ne peut pas être lancé à partir de DBNull à d'autres types.

Pour des raisons de brièveté, je vous montre seulement le code (c'est un 4000+ LOC fichier que j'ai été donné).

if (dr["STAGE"] is DBNull)
{
    dto.Stage = 1; //This is the line throwing the exception, according to stack trace
}
else
{
    dto.Stage = Convert.ToInt32(dr["STAGE"]);
}

Ici, dr est un objet DataRow qui est le résultat d'une requête à une base de données, dto est une classe de base qui a certaines propriétés, dont dto.Stage est un int membre.

J'ai regardé d'autres questions avec le même message d'erreur, mais la plupart d'entre eux semblent suggérer "Vérifier si il est DBNull", qui je suis déjà en train de faire.

Si quelqu'un peut proposer une solution?

Je ne suis pas sûr, mais il semble que l'erreur est provoquée par dto.Étape = Convert.ToInt32(dr["NIVEAU"]); essayez d'utiliser DBNULL.valeur
mais ce n'est pas d'atteindre ce point, l'exception est levée sur la ligne contenant dto.Stage = 1.
Ignorer le exact numéro de ligne dans la stack-trace; les chiffres peuvent être un peu hors - je vois cela tout le temps. Exécuter dans un débogueur avec une pause-points à la place, ou tout simplement ajouter journalisation supplémentaire pendant que vous vissez-le.
héhé, il y a une raison je utiliser dapper... pour éviter tout ce plaisir!
si l'erreur est levée lorsque vous essayez de définir dto.Étape = 1, alors il est possible que dto est nulle?

OriginalL'auteur TZHX | 2012-06-26