2015-04-07 76 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我 – 2015-04-07 09:18:27

1

这意味着,值中的一个,你已经收到,为空,并且不能被转换为字符串。你可以实现,做铸造你的函数(并检查一个值是否为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 

,然后你可以做

​​
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:谢谢,我更新了我的答案 – 2015-04-07 09:17:30

相关问题