2015-04-07 689 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

相關問題