Почему эта программа не входит в мою инструкцию ElseIf - System.DBNull

Я импортировал файл Excel в ASP.NET DataTable. Некоторые из значений пустые, особенно в индексах 2 и 3, и я хотел бы установить эти пустые поля в 0 .

При отладке значения row.item (2) и row.item (3) являются System.DBNull . Интересно, что программа входит в оператор If и устанавливает значение row.item (2) в 0, но никогда не входит в оператор ElseIf . Что происходит? Вот мой код:

If row.Item(2) Is Nothing OrElse row.Item(2).ToString = "" OrElse IsDBNull(row.Item(2)) Then
    dt.Rows.Item(i).SetField(2, 0)

ElseIf row.Item(3) Is Nothing OrElse row.Item(3).ToString = "" OrElse IsDBNull(row.Item(3)) Then
    dt.Rows.Item(i).SetField(3, 0)
End If

РЕДАКТИРОВАТЬ:

По предложению Тима я пересмотрел свой код следующим образом:

If Not row.Field(Of Int32?)(2).HasValue Then
    dt.Rows.Item(i).SetField(2, 0)
End If

If Not row.Field(Of Int32?)(3).HasValue Then
    dt.Rows.Item(i).SetField(3, 0)
End If

However, this is throwing an error--Object cannot be cast from DBNull to other types

При отладке в первом цикле:

row.Item (2) = 17

row.Item (3) = 1

Теоретически, он должен пропустить эту итерацию и перейти к следующей. Однако моя программа сразу же получает исключение с указанной выше ошибкой.

3
nl ja de

2 ответы

Поскольку ваш if выполняется, ваш else if не будет выполняться.

Если вы хотите, чтобы ваша логика else if выполнялась, даже если ваш if выполняется, просто сделайте ее собственным if :

If row.Item(2) Is Nothing OrElse row.Item(2).ToString = "" OrElse IsDBNull(row.Item(2)) Then
    dt.Rows.Item(i).SetField(2, 0)
End If

If row.Item(3) Is Nothing OrElse row.Item(3).ToString = "" OrElse IsDBNull(row.Item(3)) Then
    dt.Rows.Item(i).SetField(3, 0)
End If
8
добавлено
Примечание. Лучше использовать строго типизированный Field -extension метод, который также поддерживает типы с нулевым значением. Например: Если не row.Field (Of Int32?) (2) .HasValue row.SetField (2, 2) End If .
добавлено автор Tim Schmelter, источник
@ user1496816: завтра выйдет завтра, не успеют сейчас :)
добавлено автор Tim Schmelter, источник
Вау. Это похоже на программирование 101, и я потерпел неудачу. Благодаря!
добавлено автор TimeBomb006, источник
@TimSchmelter Спасибо за подсказку. К сожалению, строго типизированное расширение Field не работает для меня. Подробнее см. В главном сообщении.
добавлено автор TimeBomb006, источник
@TimSchmelter Только что закончил печатать.
добавлено автор TimeBomb006, источник

Вы не предоставляете образцы данных, поэтому нам просто нужно угадать. Но я предполагаю, что вам нужны два оператора If, а не ElseIf. ElseIf будет оценивать только если оператор If возвращает false.

1
добавлено
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)