правильная работа с нулевыми значениями базы данных в vb.net

Я перебираю таблицу данных и печатаю каждую строку на консоль, и я продолжаю получать ошибку dbnull. Я вставил оператор if в свой цикл, чтобы попытаться поймать его, но, похоже, я не могу заставить его работать. Есть идеи?

Спасибо!

                Do While reader.Read
                For i As Integer = 0 To reader.FieldCount - 1

                    If reader.IsDBNull(i) Then
                        Console.Write(Nothing)
                    Else
                        Console.Write(reader.GetString(i))
                    End If

                Next
                Console.WriteLine(Environment.NewLine())

person Lance Collins    schedule 01.01.2012    source источник
comment
Проверьте, действительно ли вы получаете ошибку DBNull, и опубликуйте ее.   -  person Olaf    schedule 01.01.2012


Ответы (3)


Изменение Console.Write(Nothing) на Console.Write("Nothing") может удалить одну ошибку, а reader.GetString(i) может вызвать ошибки InvalidCastException — вы должны это уловить. reader.IsDBNull(i), однако, выглядит правильно.

person Olaf    schedule 01.01.2012
comment
Ага, не понравилось написать(ничего). В итоге я просто поставил , как строку, и теперь она работает нормально. - person Lance Collins; 01.01.2012

Я никогда не использовал методы чтения, но у Console.Write(Nothing) могут возникнуть проблемы. Попробуй это:

        Do While reader.Read
        For i As Integer = 0 To reader.FieldCount - 1

            If reader.Item(i) Is DBNull.Value Then
                Console.Write("")
            Else
                Console.Write(CStr(reader.Item(i)))
            End If

        Next
        Console.WriteLine(Environment.NewLine())
    Loop
person Robert Beaubien    schedule 01.01.2012

Почему бы просто не изменить его на

        If NOT isdbnull(reader.Item(i)) Then
            Console.Write("")
        Else
            Console.Write(CStr(reader.Item(i)))
        End If

Это всегда работало лучше для меня. Я не знаю, есть ли здесь проблема DBNull vs DBNull.value.

person logixologist    schedule 01.01.2012