Как проверить нулевое значение в VB.NET - PullRequest
16 голосов
/ 18 декабря 2008

У меня есть это:

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 генерирует исключение. Что-то не так с этим кодом?

Ответы [ 10 ]

34 голосов
/ 18 декабря 2008

Эквивалент 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
11 голосов
/ 18 декабря 2008

editTransactionRow.pay_id имеет значение Null, так что фактически вы делаете: null.ToString (), и оно не может быть выполнено. Вам нужно проверить editTransactionRow.pay_id, а не editTransactionRow.pay_id.ToString ();

Ваш код должен быть (ЕСЛИ pay_id является строкой):

If String.IsNullOrEmpty(editTransactionRow.pay_id) = False Then
    stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If

Если pay_id является целым числом, вы можете просто проверить, является ли оно нулевым, как правило, без строки ... Изменить, чтобы показать вам, если это не строка:

If editTransactionRow.pay_id IsNot Nothing Then
    stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If

Если это из базы данных, вы можете использовать IsDBNull, но если нет, не используйте его.

8 голосов
/ 02 сентября 2011

Вы также можете использовать функцию IsDBNull:

If Not IsDBNull(editTransactionRow.pay_id) Then
...
8 голосов
/ 18 декабря 2008

Если вы используете строго типизированный набор данных, вам следует сделать следующее:

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, который не может быть преобразован в короткое.

6 голосов
/ 29 февраля 2012
If Not IsDBNull(dr(0)) Then
    use dr(0)
End If

Не используйте = Nothing или Is Nothing, потому что не удается проверить, является ли значение datarow нулевым или нет. Я попытался, и я убедился, что приведенный выше код работал.

4 голосов
/ 07 июня 2013

Я считаю, что самый безопасный способ -

If Not editTransactionRow.pay_id Is Nothing

Может показаться ужасным, но ISIL на самом деле сильно отличается от IsNot Nothing и не пытается вычислить выражение, которое может дать исключение нулевой ссылки.

1 голос
/ 21 ноября 2010

Это точный ответ. Попробуйте этот код:

If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
    stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
1 голос
/ 18 декабря 2008

Вы должны убедиться, что editTransactionRow не равно нулю и pay_id не равно нулю.

0 голосов
/ 18 декабря 2008
 If Short.TryParse(editTransactionRow.pay_id, New Short) Then editTransactionRow.pay_id.ToString()
0 голосов
/ 18 декабря 2008
If Not editTransactionRow.pay_id AndAlso String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
    stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...