Как проверить нулевое значение в 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 выдает исключение. Что-то не так с этим кодом?

Какой тип editTransactionRow?

Shawn 18.12.2008 18:56

Вам нужно опубликовать ТОЧНОЕ сообщение об ошибке, которое вы получаете, если вам нужна помощь.

Micah 18.12.2008 18:59

Что это за «нулевое» значение? Nothing? DbNull.Value?

Peter Mortensen 18.12.2017 02:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
18
3
269 014
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

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

Dan 18.12.2008 18:47

прочтите, что я написал. Вы можете сравнить свой INT, если он ложный, БЕЗ использования строки ...

Patrick Desjardins 18.12.2008 18:51

Вы должны убедиться, что 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?

John Dunagan 15.03.2016 21:10

Почему If Not ediTransactionRow.Ispay_id1Null Then? Переменная - editTransactionRow.pay_id. Вы имеете в виду If Not ediTransactionRow.pay_id Is Null Then?

Peter Mortensen 18.12.2017 02:25
 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, и он не пытается вычислить выражение, которое могло бы дать исключение нулевой ссылки.

Другие вопросы по теме