Comment en toute sécurité en fonte nullable résultat de sqlreader int?
J'ai une table qui contient les valeurs null et j'ai besoin de récupérer les données de la table à l'aide de SqlDataReader. Je ne peux pas comprendre comment je peux cast DBNull int.
Je suis en train de faire de cette façon pour le moment:
...
reader = command.ExecuteReader();
while (reader.Read()) {
int y = (reader["PublicationYear"] != null) ? Convert.ToInt32(reader["PublicationYear"]) : 0;
...
}
...
mais l'obtention d'un Object cannot be cast from DBNull to other types.
quand PublicationYear est null.
Comment puis-je obtenir la valeur en toute sécurité?
Grâce.
Vous devez vous connecter pour publier un commentaire.
Vous devriez comparer
reader["PublicationYear"]
àDBNull.Value
, pasnull
.DBNull
n'est pas le même quenull
. Vous devriez essayer quelque chose comme ceci à la place:Ou bien:
Explicite de vérifier si la valeur retournée est de type
DBNull
En fait, vous pouvez faire cette comparaison en valeur, ainsi que du type:
À court, vous pouvez vous attendre
DBNull
être renvoyés pour des valeurs null à partir de la base de données, plutôt que null lui-même.comme alternative, vous pouvez effectuer les opérations suivantes.
comme vous le convertissez DBNull à 0, de modifier la procédure qui ne le sélectionnez. de sorte que le sélectionne lui-même renvoie zéro pour une valeur null.
extrait de démontrer l'idée
avantage, c'est que, pas de vérification supplémentaire est nécessaire dans votre code.
Changement
reader["PublicationYear"] != null
à
reader["PublicationYear"] != DBNull.Value
C'est l'erreur:
(reader["PublicationYear"] != null)
Vous devez tester la DBNull.De la valeur....
Changer votre test de
(reader["PublicationYear"] != null)
à(reader["PublicationYear"] != DBNull.Value)
.De la base de données des valeurs null doit être comparé avec DBNull.Valeur
reader = command.ExecuteReader();
while (reader.Read()) {
int y = (reader["PublicationYear"] != DBNull.Value) ? Convert.ToInt32(reader["PublicationYear"]) : 0;
...
}