.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!