asp.net vb.net string dbnull

asp.net - La conversión del tipo ''DBNull'' al tipo ''String'' no es válida



vb.net (7)

Aparentemente, su dt.Rows(0)("SupEmail") viene como NULL desde DB y no puede asignar NULL a la propiedad de cadena. Intenta reemplazar esa línea con:

hfSupEmail.Value = If(IsDbNull(dt.Rows(0)("SupEmail")), String.Empty, dt.Rows(0)("SupEmail").ToString)

El código verifica si el valor es NULL y, si lo es, lo reemplaza por una cadena vacía, de lo contrario usa el valor original.

estoy recibiendo este problema

La conversión del tipo ''DBNull'' al tipo ''String'' no es válida.

Línea 501: hfSupEmail.Value = dt.Rows (0) ("SupEmail")

Soy muy nuevo en esto, no estoy realmente seguro de cuál es el problema exacto que alguien podría guiarme.

Muchas gracias


Debes manejarlo en el nivel de consulta DB en sí.

instead of "select name from student", use "select IsNull(name,'''') as name from student"

De esta manera, DB manejará su valor NULL.


Espero esta ayuda .... dt.Rows(0)("SupEmail") devuelve null

Para evitar este chcek antes de asignar

If Not IsDBNull(dt.Rows(0)("SupEmail")) Then hfSupEmail.Value = dt.Rows(0)("SupEmail") End If


La forma más fácil es probablemente simplemente concatenarla con una cadena vacía:

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


La solución rápida y sucia:

hfSupEmail.Value = dt.Rows(0)("SupEmail").ToString()

Esto funciona muy bien cuando su objetivo final y los datos de origen ya son cadenas. Esto se debe a que cualquier .ToString() adicional .ToString() para algo que ya es una cadena generalmente será optimizado por el jitter en un no-op, y si es NULL, la expresión DBNull.Value.ToString() resultante produce la cadena vacía que desea .

Sin embargo, si está trabajando con tipos que no son de cadena, puede terminar haciendo trabajo extra, especialmente con algo como DateTime si desea un formato específico.


Para manejarlo desde el código, aquí hay un pequeño método de extensión.

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

Llámalo así.

hfSupEmail.Value = dt.Rows(0)("SupEmail").DefaultIfDBNull(Of String)()


Puede usar el método de campo de Datarow combinado con un operador If para verificar un valor nulo en una línea como esta. Si es nulo, puede reemplazarlo con una cadena vacía (u otra cadena de su elección):

hfSupEmail.Value = If(dt.Rows(0).Field(Of String)("SupEmail"), "")