处理DataReader中的Null

时间:2012-09-01 21:10:27

标签: asp.net vb.net dataset

我过去做过这个,但我不记得处理DBNULLS的正确方法。

这是vb.net

我得到的错误是从“DBNull”类型转换为“Integer”类型无效。

这是代码。

Dim reader As MySqlDataReader = command.ExecuteReader
Do While reader.Read
Dim item As New clsProvider(reader.Item("MasterAccountID"), reader.Item("CompanyName"), reader.Item("Address"), reader.Item("Postcode"), reader.Item("Telephone"), reader.Item("Fax"), reader.Item("Number_of_Companies"), reader.Item("Total_Number_of_employees"), reader.Item("MainContactName"), reader.Item("MainContactPhone"), reader.Item("MainContactEmail"), reader.Item("Fee"), Convert.ToString(reader.Item("Notes")))
            list.Add(item)
Loop
reader.Close()

我遇到的问题是数据库中的某些项可能为空。我确信在过去我做过像

这样的事情
convert.ToString(reader.item("Something") 

但对于我的生活,我无法记住。

4 个答案:

答案 0 :(得分:2)

如果列可以为空,那么您应该检查null:

If (reader.IsDBNull(ordinal))

请参阅IsDBNull

答案 1 :(得分:1)

也许

 reader.item("Something").ToString()

你以前做过什么?

这不一定是正确的,但它确实非常有效地处理空字符串。

答案 2 :(得分:1)

也许:

IFF(reader.item("Something") != DBNull.Value, reader.item("Something"), "")

答案 3 :(得分:0)

您必须首先检查列值是否为null(检查DBNull的传入值)。一旦您知道可以决定下一步做什么 - 为您的变量分配null或其他一些默认值。

我不确定我的VB.Net是否仍然符合标准,但这样的事情应该有所帮助:

Dim item As New clsProvider
item.AccountId = TryCast(reader.Item("MasterAccountID"), String)
item.SomeInt= If(TryCast(reader.Item("SomeInt"), System.Nullable(Of Integer)), 0)

使用TryCast检查是否可以施法。