У меня есть это:
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 выдает исключение. Что-то не так с этим кодом?
Вам нужно опубликовать ТОЧНОЕ сообщение об ошибке, которое вы получаете, если вам нужна помощь.
Что это за «нулевое» значение? Nothing? DbNull.Value?





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 является целым числом, вы можете просто проверить, нормально ли оно равно null без String ... Отредактируйте, чтобы показать вам, не является ли это строкой:
If editTransactionRow.pay_id IsNot Nothing Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Если это из базы данных, вы можете использовать IsDBNull, но если нет, не используйте его.
Что ж, я не могу это проверить: если String.IsNullOrEmpty (editTransactionRow.pay_id1) = False, то stTransactionPaymentID = editTransactionRow.pay_id1 'Проверить нулевое значение End If
прочтите, что я написал. Вы можете сравнить свой INT, если он ложный, БЕЗ использования строки ...
Вы должны убедиться, что editTransactionRow не равен нулю, а pay_id не равно нулю.
If Not editTransactionRow.pay_id AndAlso String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Эквивалент 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
Если вы используете строго типизированный набор данных, вам следует сделать это:
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, который не может быть преобразован в короткий.
Вы уверены, что приведенный выше синтаксис работает? что такое ediTransactionRow.Ispay_id1Null?
Почему If Not ediTransactionRow.Ispay_id1Null Then? Переменная - editTransactionRow.pay_id. Вы имеете в виду If Not ediTransactionRow.pay_id Is Null Then?
If Short.TryParse(editTransactionRow.pay_id, New Short) Then editTransactionRow.pay_id.ToString()
Это точный ответ. Попробуйте этот код:
If String.IsNullOrEmpty(editTransactionRow.pay_id.ToString()) = False Then
stTransactionPaymentID = editTransactionRow.pay_id 'Check for null value
End If
Вы также можете использовать функцию IsDBNull:
If Not IsDBNull(editTransactionRow.pay_id) Then
...
If Not IsDBNull(dr(0)) Then
use dr(0)
End If
Не используйте = Nothing или Is Nothing, потому что он не может проверить, является ли значение datarow нулевым или нет. Я попробовал и убедился, что приведенный выше код работает.
Я считаю, что самый безопасный способ - это
If Not editTransactionRow.pay_id Is Nothing
Он может ужасно читать, но ISIL на самом деле сильно отличается от IsNot Nothing, и он не пытается вычислить выражение, которое могло бы дать исключение нулевой ссылки.
Какой тип editTransactionRow?