Преобразование из типа "DBNull" в тип "String" недействительно
Я получаю эту проблему
Преобразование из типа DBNull для типа 'String' недопустимо.
Строка 501: hfSupEmail.Value = dt.Rows(0) ( "SupEmail" )
Я очень новичок в этом, я не совсем уверен, что такое точная проблема
может ли кто-нибудь меня вести?
Большое спасибо
Ответы
Ответ 1
Быстрое и грязное исправление:
hfSupEmail.Value = dt.Rows(0)("SupEmail").ToString()
Это очень хорошо работает, когда ваша конечная цель и исходные данные уже являются строками. Это связано с тем, что любой дополнительный вызов .ToString()
для чего-то, что уже строка, как правило, оптимизируется джиттером в бездействие, и если оно равно NULL, то получающееся выражение DBNull.Value.ToString()
создает пустую нужную строку.
Однако, если вы работаете со нестроковыми типами, вы можете выполнить значительную дополнительную работу, особенно с чем-то вроде DateTime
или числовым значением, где вы хотите конкретное форматирование. Помните, что проблемы интернационализации означают, что синтаксический анализ и составление значений даты и числа на самом деле являются удивительно дорогими операциями; выполнение "дополнительной" работы, чтобы избежать этих операций, часто более чем стоит.
Ответ 2
Надеюсь, эта помощь....
dt.Rows(0)("SupEmail")
возвращает null
Чтобы избежать этого chcek перед назначением
If Not IsDBNull(dt.Rows(0)("SupEmail")) Then
hfSupEmail.Value = dt.Rows(0)("SupEmail")
End If
Ответ 3
По-видимому, ваш dt.Rows(0)("SupEmail")
приходит как NULL из БД и вы не можете назначить NULL для свойства string. Попробуйте заменить эту строку следующим образом:
hfSupEmail.Value = If(IsDbNull(dt.Rows(0)("SupEmail")), String.Empty, dt.Rows(0)("SupEmail").ToString)
Код проверяет, является ли значение NULL, а если оно - заменяет его пустой строкой, в противном случае используется исходное значение.
Ответ 4
Вы должны обрабатывать его непосредственно на уровне запросов БД.
instead of "select name from student", use "select IsNull(name,'') as name from student"
Таким образом, DB будет обрабатывать ваше значение NULL.
Ответ 5
Чтобы обработать его из кода, здесь приведен небольшой метод расширения
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)()
Ответ 6
Вы можете использовать метод Field of the Datarow в сочетании с If Оператор, чтобы проверить значение Null в одной строке, как это. Если оно равно null, вы можете заменить его пустой строкой (или другой строкой по вашему выбору):
hfSupEmail.Value = If(dt.Rows(0).Field(Of String)("SupEmail"), "")
Ответ 7
Самый простой способ - это просто связать его с пустой строкой:
hfSupEmail.Value = dt.Rows(0)("SupEmail") & ""
Ответ 8
Помогите пожалуйста Преобразование из типа 'DBNull' в тип 'String' не
Computer_Name = Me.DataGridView1.Rows(i).Cells(1).Value
Computer_Serial_Number = Me.DataGridView1.Rows(i).Cells(2).Value
Monitor_Serial_Number = Me.DataGridView1.Rows(i).Cells(3).Value
Department = Me.DataGridView1.Rows(i).Cells(4).Value
System_Manufacture = Me.DataGridView1.Rows(i).Cells(5).Value
User_Name = Me.DataGridView1.Rows(i).Cells(6).Value.ToString