我在db中有一个Hash格式的列值,列数据类型是varbinary(8000)。我将它转换为字节数组。
问题是这个列值有空值的时候了,现在在我的代码中我想检查列值是否具有空值然后返回字节数组的默认值,否则使用以下代码返回列值
objUser.Password_Hash = IIf(reader("Password_Hash") Is Nothing, {}, reader("Password_Hash"))
这会产生如下错误
System.InvalidCastException: Unable to cast object of type 'System.Byte' to type 'System.Byte[]'.
答案 0 :(得分:1)
首先,不要在VB中使用IIf
,除非您使用的版本太旧以至于If
运算符不存在。我认为这意味着VB 2005。
其次,VB中的数据库中的NULL值不是Nothing
。它实际上是一个对象,特别是DBNull
类的一个实例,由DBNull.Value
字段表示。
第三,虽然您可以根据需要直接与DBNull.Value
进行比较,但数据阅读器和DataRows
实际上有专门用于测试NULL的方法。
所以,把它们放在一起:
objUser.Password_Hash = If(reader.IsDBNull(reader.GetOrdinal("Password_Hash")),
New Byte() {},
DirectCast(reader("Password_Hash"), Byte()))