2016-09-13 5 views
0

J'ai le code VB.Net dont la valeur en prenant de db et si elle est nulle faire un certain travailannulable entier obtenu valeur NULL ne pas exécuter la commande

While reader.Read 
      tocken = reader.GetInt16("Tocken_No") 
      If tocken.HasValue = False Then 
       TxtPTocken.Text = 1 
      Else 
       TxtPTocken.Text = tocken + 1 
      End If 
     End While 

instruction Else fonctionne correctement, mais la première partie non. tocken est nullable court. Qu'est-ce qui me manque? S'il vous plaît aider

+0

Vous devez activer l'option stricte – Plutonix

Répondre

0

Ce code n'a pas de sens. Vous appelez GetInt16, ce qui signifie que vous allez obtenir un Int16. Votre variable tocken peut être de type Nullable(Of Short) mais vous lui attribuez une valeur de sorte que HasValue soit TOUJOURS True.

Votre problème ici est que si votre champ de base de données est NULL alors votre code va lancer une exception. Des méthodes telles que GetIn16 échouent si aucune valeur du type attendu n'est disponible. Il est à vous de vérifier NULL et que, par conséquent gérer:

tocken = If(reader.IsDBNull(reader.GetOrdinal("Tocken_No")), 
      CType(Nothing, Short?), 
      reader.GetInt16("Tocken_No")) 
+0

Mon problème était mon lecteur de sélection de requête n'a pas eu une ligne pour lire. J'ajoute la commande pour vérifier hasrow en dehors de la rangée et maintenant je suis heureux. Merci de votre aide –