2015-04-07 2 views
4

При использовании приведенного ниже кода отображается одна ошибка. Ошибка: «Conversion from type 'DBNull' to type 'String' is not valid.« Помогите найти правильное решение. Спасибо.Преобразование из типа «DBNull» в тип «String» недействительно vb.net

Код:

cmd2.CommandText = "SELECT [first_name]+' ' +[middle_name]+' ' + [last_name] AS NAME, [staff_id] FROM [staff_profile]" 
sdr2 = cmd2.ExecuteReader 
While sdr2.Read 
drop1l.Items.Add(New ListItem(sdr2("name"), sdr2("staff_id"))) // error popup here 
End While 
sdr2.Close() 

ответ

8

Вы должны попробовать так:

If Not IsDBNull(dt.Rows(0)("name")) Then 
    sdr2.Value = dt.Rows(0)("name") 
End If 
If Not IsDBNull(dt.Rows(1)("staff_id")) Then 
    sdr2.Value = dt.Rows(1)("staff_id") 
End If 

или грязный исправить так:

drop1l.Items.Add(New ListItem(sdr2("name").ToString(), sdr2("staff_id").ToString())) 
+2

выглядит красиво и полезно. +1 от меня –

1

Это означает, что один из значений, которые вы получили , имеет значение null и не может быть передан в строку. Вы могли бы реализовать функцию, которая делает кастинг для вас (и проверяет, является ли значение DBNull или ничего), то в строке:

Function GetStringValue(value as Object) as String 
    if value is Nothing or IsDBNull(value)then 
     Return String.Empty 
    End If 
    Return DirectCast(value, GetType(String)) 
End Function 

, а затем вы можете сделать

drop1l.Items.Add(new ListItem(GetStringValue(sdr2("name")), GetStringValue(sdr2("staff_id"))) 
2

Вы получив эту ошибку, потому что либо sdr2("name"), либо sdr2("staff_id") - null. Вы можете избежать этого двумя способами:

1.

drop1l.Items.Add(New ListItem(sdr2("name").Tostring(), sdr2("staff_id").Tostring())) 

2. или проверить нуль в запросе

+1

'ToString()' это метод –

+1

@ Rahul Tripathi: спасибо, я обновляю свой ответ –

Смежные вопросы