Как проверить значение 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()