web-dev-qa-db-fra.com

La conversion du type 'DBNull' en type 'String' n'est pas valide

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

18
user3571305

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.

22
Joel Coehoorn

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
5
Rohit

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.

2
Yuriy Galanter

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. 

2
Amnesh Goel

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)()
1
naveen

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"), "")
0
Matt Wilko

Le moyen le plus simple est probablement de le concaténer avec une chaîne vide:

hfSupEmail.Value = dt.Rows(0)("SupEmail") & ""
0
FrankB