当字段可能为空时,如何将数据库编号转换为十六进制



我无法从十进制转换为十六进制。

这是我的代码:

select new
{
    MessageID = table1.Field<Int32?>("MessageID"),
    MessageIDHex = (String)table1.Field<Int32>("MessageID").ToString("X")
}

它给了我错误

与 DBNUll.Value 不能更改为 System.In32

所以我试过了

MessageIDHex= (String)table1.Field<Int32?>("MessageID").ToString("X")} 

但它给了我另一个错误。

我该如何修复它,或者它确实有另一种解决方法。

显然

MessageID可以是DBNull。最简单的解决方案是将值读取为可为 null 的 int(以防止发生转换错误)。如果将 Field 与可为 null 的类型一起使用,则DBNull将自动转换为 null ,然后可以使用 ?? 运算符将其强制转换为 0:

MessageIDHex = (table1.Field<Int32?>("MessageID") ?? 0).ToString("X")

或者,如果您愿意,可以让数据库中的 DBNull 值生成空字符串或空字符串MessageIDHex

MessageIDHex = table1.IsNull("MessageID") ? "" : table1.Field<Int32>("MessageID").ToString("X")
MessageIDHex = table1.IsNull("MessageID") ? null : table1.Field<Int32>("MessageID").ToString("X")

最新更新