Как проверить значение Null в VB.NET
У меня есть это:
If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Теперь, когда editTransactionRow.pay_id
является Null Visual Basic, генерирует исключение. Что-то не так с этим кодом?
Ответы
Ответ 1
Если вы используете сильно типизированный набор данных, вы должны сделать это:
If Not ediTransactionRow.Ispay_id1Null Then
'Do processing here
End If
Вы получаете ошибку, потому что сильно типизированный набор данных извлекает базовое значение и предоставляет преобразование через свойство. Например, здесь происходит, по сути, то, что происходит:
Public Property pay_Id1 Then
Get
return DirectCast(me.GetValue("pay_Id1", short)
End Get
'Abbreviated for clarity
End Property
Метод GetValue возвращает DBNull, который не может быть преобразован в короткий.
Ответ 2
Эквивалент null
в VB равен Nothing
, поэтому ваш чек хочет быть:
If editTransactionRow.pay_id IsNot Nothing Then
stTransactionPaymentID = editTransactionRow.pay_id
End If
Или, возможно, если вы действительно хотите проверить нулевое значение SQL:
If editTransactionRow.pay_id <> DbNull.Value Then
...
End If
Ответ 3
editTransactionRow.pay_id Null, поэтому на самом деле вы делаете: null.ToString(), и он не может быть выполнен. Вам нужно проверить editTransactionRow.pay_id, а не editTransactionRow.pay_id.ToString();
Код должен быть (IF pay_id - это строка):
If String.IsNullOrEmpty(editTransactionRow.pay_id) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Если pay_id является целым числом, вы можете просто проверить, нормально ли оно равно null без String...
Изменить, чтобы показать вам, если это не строка:
If editTransactionRow.pay_id IsNot Nothing Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Если это из базы данных, вы можете использовать IsDBNull, но если нет, не используйте ее.
Ответ 4
Вы также можете использовать функцию IsDBNull:
If Not IsDBNull(editTransactionRow.pay_id) Then
...
Ответ 5
If Not IsDBNull(dr(0)) Then
use dr(0)
End If
Не используйте = Nothing
или Is Nothing
, потому что он не может проверить, имеет ли значение datarow значение null или нет. Я попытался, и я уверен, что приведенный выше код работал.
Ответ 6
Я считаю, что самый безопасный способ -
If Not editTransactionRow.pay_id Is Nothing
Он мог бы прочитать ужасно, но ISIL на самом деле сильно отличается от IsNot Nothing, и он не пытается и не оценивает выражение, которое могло бы дать исключение для ссылки.
Ответ 7
Вы должны проверить, чтобы editTransactionRow не был равен null, а pay_id не равен null.
Ответ 8
Это точный ответ. Попробуйте этот код:
If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Ответ 9
If Not editTransactionRow.pay_id AndAlso String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Ответ 10
If Short.TryParse(editTransactionRow.pay_id, New Short) Then editTransactionRow.pay_id.ToString()