Преобразование типа "DBNull" в тип "String" недопустимо

Я получаю эту проблему

преобразование из типа "DBNull" в тип "String" недопустимо.

строка 501: hfSupEmail.Значение= Второзаконие.Строки (0) ("SupEmail")

Я очень новичок в этом, я не совсем уверен, в чем именно проблема кто-нибудь может меня проводить?

большое спасибо

7 ответов


быстрое и грязное исправление:

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

это работает очень хорошо, когда ваша конечная цель и исходные данные уже являются строками. Это потому, что любой дополнительный .ToString() вызов чего-то, что уже является строкой, обычно оптимизируется дрожанием в no-op, и если это NULL, то результирующее DBNull.Value.ToString() expression создает пустую строку, которую вы хотите.

однако, если вы работаете нестроковые типы, вы можете в конечном итоге делать дополнительную работу, особенно с чем-то как DateTime, если вы хотите конкретное форматирование.


Надеюсь, Что Это Поможет.... dt.Rows(0)("SupEmail") возвращает null

Чтобы избежать этого chcek перед назначением

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

видимо ваш dt.Rows(0)("SupEmail") поступает как NULL из DB, и вы не можете назначить NULL свойству string. Попробуйте заменить эту строку на:

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

код проверяет, является ли значение NULL, и если это-заменяет его пустой строкой, в противном случае использует исходное значение.


вы должны обрабатывать его на уровне запроса DB.

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

таким образом, DB будет обрабатывать ваше нулевое значение.


чтобы обработать его из кода, вот небольшой метод расширения

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

назовем это так.

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

можно использовать метод поля Datarow в сочетании с Если Оператор чтобы проверить значение Null в одной строке, как это. Если он равен null, вы можете заменить его пустой строкой (или другой строкой по вашему выбору):

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

самый простой способ, вероятно, просто объединить его с пустой строкой:

hfSupEmail.Значение = ДТ.Строки (0) ("SupEmail")&""