.Net SqlDataReader Élément est Null [VB]
Ok, c'est étrange. Je suis tombé sur cette question ce soir, quand j'ai été l'ajout d'une fonction pour notre site de l'entreprise.
Je suis en train de construire un calendrier personnalisé de contrôle qui interroge notre base de données pour afficher les événements d'entreprise. Voici la situation, il y a un EndDate
valeur stockée et sur le dev du système de l'un des événements ont un NULL
valeur. Pas grand-chose puisque c'est seulement un système de test, mais pourrait aussi bien vérifier avant d'essayer de l'utiliser sur le côté sécuritaire. J'ai compris le code suivant devrait fonctionner:
While dr.Read()
corporateTable.Rows.Add(New Object() { _
Convert.ToDateTime(dr("EventBeginDate")) _
, IIf(dr("EventEndDate") Is DBNull.Value, Convert.ToDateTime(dr("EventBeginDate")).AddDays(1), Convert.ToDateTime(dr("EventEndDate"))) _
, Convert.ToString(dr("EventType")) _
, Convert.ToString(dr("EventDescription")) _
, Convert.ToString(dr("EventMessage")) _
})
End While
Mais il n'a pas, j'ai toujours continué à obtenir le Object cannot be cast from DBNULL
erreur. J'ai donc pensé qu'il plus de et est venu avec ce code qui fonctionne avec succès, bien que je ne l'aime pas et pense que c'est laid.
While dr.Read()
Dim column As Integer = 0
While column < dr.FieldCount - 1
If dr.GetName(column) = "EventEndDate" Then
Exit While
End If
column += 1
End While
corporateTable.Rows.Add(New Object() { _
Convert.ToDateTime(dr("EventBeginDate")) _
, IIf(dr.IsDBNull(column), Convert.ToDateTime(dr("EventBeginDate")).AddDays(1), dr.Item(column)) _
, Convert.ToString(dr("EventType")) _
, Convert.ToString(dr("EventDescription")) _
, Convert.ToString(dr("EventMessage")) _
})
End While
La chose qui devient vraiment moi, c'est, à un moment j'ai eu ceci:
, IIf(dr.IsDBNull(column), Convert.ToDateTime(dr("EventBeginDate")).AddDays(1), Convert.ToDateTime(dr("EventEndDate"))) _
Penser que cela devrait fonctionner car il ne devrait évaluer la dr()
si ce n'est pas NULL
. Cependant, il gardait la erroring arrière à la fin, parce que la valeur est en fait NULL
.
Pour enfin arriver à ma question, désolé pour la longue explication.
Pourquoi est-il que même si je vérifie si c'est NULL
avant d'utiliser la valeur, il des erreurs à la partie qui n'est pas appelée à moins qu'il n'est pas NULL
? A-t-elle à voir avec le fait que je suis en utilisant le IIF()
et c'est l'évaluation de l'ensemble de l'énoncé? Ou, à l'aide de la dr()
, il évalue au moment de l'exécution?
Je suis juste perplexe et j'aimerais savoir ce qui se passe exactement, donc si c'est possible, venir avec une solution de nettoyage.
Merci d'avance!
Vous devez vous connecter pour publier un commentaire.
IIf
toujours évalue à la fois le vrai et le faux des pièces - utiliser inlineIf
au lieu de cela, si vous voulez éviter cela:IIf
est l'abréviation de immédiat si, qui ne pouvait pas être plus éloigné de la vérité. À moins que vous l'interpréter comme immédiatement en évaluant à la fois les conditions. =)If(...)
est responsable de la pendaison de la page - vous êtes sûr qu'il se bloque et ne fait pas d'erreur?While column
et a remplacé leIIF()
avec leIf()
et la page ne serait pas la même charge. Débogué et se bloque. Ne fait pas d'erreur non plus.dr.IsDBNull
- à la place, il se compare à DBNull.De la valeur.why
qui se passait, car j'étais curieux. Je vais accepter votre réponse. Merci pour l'aide!La fonction Iif est de l'évaluation de chaque instruction, utilisez une autre structure pour votre null check comme La fonction SI