0

我过去曾这样做过,但我不记得处理 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

4 回答 4

2

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

If (reader.IsDBNull(ordinal))

请参见IsDBNull

于 2012-09-01T21:24:32.387 回答
1

Perhaps

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

is what you've done before?

This isn't necessarily correct but it does deal with null strings quite effectively.

于 2012-09-01T21:18:27.663 回答
1

Perhaps:

IFF(reader.item("Something") != DBNull.Value, reader.item("Something"), "")
于 2012-09-01T21:23:08.453 回答
0

您必须首先检查列值是否为空(检查 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检查是否可以进行投射。

于 2012-09-01T21:23:50.797 回答