je reçois ce problème
La conversion du type 'DBNull' en type 'String' n'est pas valide.
Ligne 501: hfSupEmail.Value = dt.Rows (0) ("SupEmail")
je suis très nouveau dans ce domaine, je ne suis pas vraiment sûr du problème exact. Quelqu'un pourrait-il me guider?
Merci beaucoup
Le correctif rapide et sale:
hfSupEmail.Value = dt.Rows(0)("SupEmail").ToString()
Cela fonctionne très bien lorsque votre cible éventuelle et les données source sont déjà des chaînes. En effet, tout appel .ToString()
supplémentaire pour quelque chose qui est déjà une chaîne sera généralement optimisé par la gigue en un non-op, et si c'est NULL, l'expression DBNull.Value.ToString()
résultante produira la chaîne vide souhaitée.
Toutefois, si vous travaillez avec des types non-chaînes, vous pouvez vous retrouver à faire un travail supplémentaire, en particulier avec quelque chose comme un DateTime si vous souhaitez une mise en forme spécifique.
Espérons que cette aide .... dt.Rows(0)("SupEmail")
renvoie null
Pour éviter ce chcek avant d’attribuer
If Not IsDBNull(dt.Rows(0)("SupEmail")) Then
hfSupEmail.Value = dt.Rows(0)("SupEmail")
End If
Apparemment, votre dt.Rows(0)("SupEmail")
arrive comme NULL à partir de la base de données et vous ne pouvez pas affecter NULL à la propriété string. Essayez de remplacer cette ligne par:
hfSupEmail.Value = If(IsDbNull(dt.Rows(0)("SupEmail")), String.Empty, dt.Rows(0)("SupEmail").ToString)
Le code vérifie si la valeur est NULL et si c'est le cas - la remplace par une chaîne vide, sinon utilise la valeur d'origine.
Vous devriez le gérer au niveau de requête de base de données lui-même.
Au lieu de "sélectionner le nom de l'étudiant", utilisez "sélectionner IsNull (nom, '') comme nom de l'étudiant "
De cette manière, DB gérera votre valeur NULL.
Pour le manipuler à partir du code, voici une petite méthode d'extension
Imports Microsoft.VisualBasic
Imports System.Runtime.CompilerServices
Public Module HTMLExtensionMethods
<Extension()> _
Public Function DefaultIfDBNull(Of T)(ByVal obj As Object) As T
Return If(Convert.IsDBNull(obj), CType(Nothing, T), CType(obj, T))
End Function
End Module
Appelez ça comme ça.
hfSupEmail.Value = dt.Rows(0)("SupEmail").DefaultIfDBNull(Of String)()
Vous pouvez utiliser la méthode Field du champ Datarow associée à un opérateur If pour rechercher une valeur Null sur une ligne, comme celle-ci. S'il est nul, vous pouvez le remplacer par une chaîne vide (ou une autre chaîne de votre choix):
hfSupEmail.Value = If(dt.Rows(0).Field(Of String)("SupEmail"), "")
Le moyen le plus simple est probablement de le concaténer avec une chaîne vide:
hfSupEmail.Value = dt.Rows(0)("SupEmail") & ""