Обработка входной строки VB.NET DataRow в неправильном формате для нулевого значения

Я перебираю строки DataRowCollection и присваиваю поля каждой строки переменной. Я всегда получаю «Входная строка была в неправильном формате», независимо от того, как я это использовал. Мне просто нужно, чтобы gapCd содержал 0, если поле равно null или значение в противном случае. Кажется, что IsDbNull не возвращает true должным образом. Я также безуспешно пробовал сравнивать DbNull.Value. Буду признателен за любую оказанную помощь.

Dim gapCd As Integer = IIf(IsDBNull(row("GAP_CD")), 0, row("GAP_CD"))

person Adam    schedule 30.09.2011    source источник
comment
Вы уверены, что проблема не в том, что где-то у вас есть нечисловое значение для GAP_CD?   -  person Jon Skeet    schedule 30.09.2011
comment
Строки данных возвращаются из базы данных Oracle. Тип столбца в базе данных — числовой. Результаты возвращаются из пакета, а столбец может быть нулевым. Я не думаю, что правильно проверяю значение null. Я даже пробовал CInt() перед назначением, но не в кости. Любые идеи?   -  person Adam    schedule 30.09.2011
comment
Сначала я бы выяснил, действительно это нулевая проблема или нет. Например, что произойдет, если вы отфильтруете пустые значения в запросе? Вы все еще понимаете проблему? Обратите внимание, что он выполняет синтаксический анализ строки, что не идеально - конечно, вы должны иметь возможность считывать фактическое значение непосредственно из строки данных...   -  person Jon Skeet    schedule 30.09.2011


Ответы (1)


Помните, что Integer как тип значения уже инициализирован нулем. Итак, попробуйте следующее:

Dim gapCd As Integer 
If Not IsDBNull(row("GAP_CD")) Then gapCd = CInt(row("GAP_CD")) 

и если это не сработает, пришло время попробовать журналирование:

Dim gapCd As Integer
Try
    If Not IsDBNull(row("GAP_CD")) Then gapCd = CInt(row("GAP_CD"))
Catch Ex As Exception
    SomeLoggingFunction(row("GAP_CD").ToString())
End Try 

По какой-то причине я снова увидел это сегодня, и при новом прочтении мне стало ясно, что все, что вам нужно сделать, это удалить одно «я» из вашего кода, чтобы изменить функцию IIf() на оператор If() и принудительно сократить оценку:

Dim gapCd As Integer = If(IsDBNull(row("GAP_CD")), 0, row("GAP_CD"))
person Joel Coehoorn    schedule 30.09.2011