如何防止异常null值使用Oledb检索记录
本文关键字:Oledb 检索 记录 何防止 异常 null | 更新日期: 2023-09-27 18:00:23
while(r.Read())
{
ListViewItem item = new ListViewItem(r.GetString(2));
item.SubItems.Add(r.GetString(3));
item.SubItems.Add(r.GetString(4));
item.SubItems.Add(r.GetString(5));
item.SubItems.Add(r.GetString(6));
item.SubItems.Add(r.GetString(7));
item.SubItems.Add(r.GetString(8));
item.SubItems.Add(r.GetString(11));
lsvListOfBooks.Items.Add(item);
}
这段代码用记录填充列表视图。但是如果来自数据库的单元格为空,它抛出异常
Specified cast is not valid
并退出线程,其余记录将不会显示。
我该怎么处理?
问题是,结果列中的null值由不同的类型表示,确切地说是DBNull
,并且不能简单地转换为string
。
对此,最简单的解决方案是为IDataReader
接口创建一个扩展,该扩展将检测DBNull
值并对其进行转换。将此类添加到您的代码中:
public static partial class Extensions
{
public static string GetNullableString(this IDataReader self, int ordinal)
{
return self.IsDBNull(ordinal) ? null : self.GetString(ordinal);
}
}
现在,您可以在代码中用GetNullableString
替换GetString
,它应该按预期工作。IsDBNull
调用将检测到null条件并返回null,而不是抛出错误。
不幸的是,所有的数据类型都需要这种东西。如果空值对字段有效,则IDataReader
将使用与任何可为空类型都不兼容的DBNull
值。