nizam15 Ответов: 3

Преобразование из типа 'DBNull' в тип 'String' недопустимо.


хай там, ребята, мне здесь нужна помощь. Мой друг попросил меня заглянуть в его код, потому что в нем появились некоторые ошибки. В основном эта часть кода делает то, что когда я нажимаю на кнопку, она автоматически извлекает данные из таблицы доступа и вставляет их в listview. Раньше он работал, но когда я поиграл с данными в таблице, он вдруг придумал эту ошибку. Преобразование из типа 'DBNull' в тип 'String' недопустимо. Я все еще новичок VB.net так что я не знаю, в чем проблема. Вот сегмент кода,

Private Sub btnShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShow.Click
        Dim li As ListViewItem
        If btnShow.Text = "Show All" Then
            LstCustomer.Items.Clear()
            Com.CommandText = "Select * from tblCustomer"
            Dr = Com.ExecuteReader
            Do While Dr.Read = True
                li = LstCustomer.Items.Add(Dr(0), 0)
                With li.SubItems
                    .Add(1).Text = Dr(1)
                    .Add(2).Text = Dr(2) 'the error is here
                    .Add(3).Text = Dr(3) 
                    .Add(3).Text = Dr(3)
                    .Add(4).Text = Dr(4)
                    .Add(5).Text = Dr(5)
                    .Add(6).Text = Dr(6)
                    .Add(7).Text = Dr(7)
                    .Add(8).Text = Dr(8)
                    .Add(9).Text = Dr(9)
                    .Add(10).Text = Dr(10)
                    'MsgBox(IsDBNull(Dr(9)))
                End With
            Loop
            Dr.Close()
            btnShow.Text = "Unshow"
        Else
            LstCustomer.Items.Clear()
            btnShow.Text = "Show All"
        End If
    End Sub


любая помощь будет очень признательна~ :)

3 Ответов

Рейтинг:
9

Kschuler

Ричард Маккатчан прав. Вы извлекаете запись из базы данных, и по какой-то причине в одном или нескольких полях нет данных. Вам нужно проверить наличие DBNull.Значение перед добавлением его в ListView. Вот документация MSDN о DBNull.Ценность. Он включает в себя пример функции, которая проверяет наличие null и возвращает nothing вместо DBNull.Ценность.

http://msdn.microsoft.com/en-us/library/system.dbnull.value.aspx[^]

Вы не можете хранить DBNull.Значение в listview. Вы должны преобразовать его во что-то другое вручную.


Рейтинг:
24

fjdiewornncalwe

Как продолжение ответов Ричарда и Кшулера, простой способ сделать это-что-то вроде этого.

With li.SubItems
   .Add(1).Text = Dr(1)
   .Add(2).Text = If(IsDBNull(Dr(2), string.Empty, Dr(2))
   .Add(3).Text = Dr(3) 
   .Add(3).Text = Dr(3)
   .Add(4).Text = Dr(4)
   .Add(5).Text = Dr(5)
   .Add(6).Text = Dr(6)
   .Add(7).Text = Dr(7)
   .Add(8).Text = Dr(8)
   .Add(9).Text = Dr(9)
   .Add(10).Text = Dr(10)
   'MsgBox(IsDBNull(Dr(9)))
End With


Рейтинг:
0

Richard MacCutchan

Это просто означает, что предмет не имеет никакой ценности, поэтому вам нужно проверить DBNull прежде чем пытаться добавить его в ListView.


nizam15

тест на DBNull??в смысле??извините, что я не так хорошо знаком с VB.

Richard MacCutchan

Тогда почему вы пытаетесь исправить этот код? Возвращайся к своему другу и покажи ему мои комментарии.

nizam15

я показал ему твой комментарий, но даже он не знает, как.

Richard MacCutchan

Как он узнал, что нужно написать код, который вы задали в вопросе? Это очень просто if заявление.

Richard MacCutchan

У него даже есть код в комментарии к концу фрагмента, размещенного в вопросе.

nizam15

это те тайны, которые мы оба хотим знать. Но я думаю, что уже получил достаточно информации. Спасибо! :)