“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?
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
Vous devez vous connecter pour publier un commentaire.
Utilisation
==
au lieu deis
OriginalL'auteur Aelios
Utiliser cette légèrement plus efficace approche
Accès aux colonnes par leur indice est plus rapide que l'accès par nom. L'index d'une colonne peut être récupéré avec la
GetOrdinal
méthode de laDataReader
. C'est mieux de le faire avant la boucle.OriginalL'auteur Olivier Jacot-Descombes
Utiliser le Système.Les données.DataRow.IsNull fonction de la place.
OriginalL'auteur David
Ci-dessous est un exemple de nullable type de données que vous pouvez utiliser pour éviter de DBNull erreurs.
L'exemple ci-dessous n'est pas une véritable solution pour le problème que vous avez, mais c'est un exemple de la façon dont vous pouvez aller sur le résoudre. Il pense que l'apprentissage de poisson, au lieu de lui donner un poisson.
J'ai tiré cela de http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
OriginalL'auteur EastOfJupiter
@MarcGravell avait le droit de lui dans son commentaire:
@Sergey réponse est tout simplement faux.
OriginalL'auteur TZHX