如何在IDataReader中读取null值?SQLite字节类型空值处理问题
解决SQLite读取空BLOB字段抛出类型转换异常的方案
异常原因
IDataRecord.GetBytes 方法本身不支持处理数据库NULL值,当目标字段为NULL时直接调用该方法就会触发Invalid cast exception异常,你当前的写法缺少空值前置判断,所以会触发报错。
正确处理逻辑
处理步骤如下:
- 首先调用
IsDBNull方法判断对应索引的字段是否为数据库NULL值 - 若为NULL直接返回
null即可 - 若非NULL再调用
GetBytes读取二进制内容
示例代码
byte[] blobValue = null; if (!iData.IsDBNull(4)) { // 先获取二进制内容的总长度 long blobLength = iData.GetBytes(4, 0, null, 0, int.MaxValue); blobValue = new byte[blobLength]; // 读取完整内容到数组 iData.GetBytes(4, 0, blobValue, 0, (int)blobLength); }
注意事项
- 不需要手动对返回的长度做
-1处理,GetBytes返回的就是字段内容的实际字节数,减1会导致最后一个字节丢失 - 字段索引要对应正确,避免读错位
内容的提问来源于stack exchange,提问作者user1241241
相关产品推荐
相关产品推荐

