网络上的一般说法有以下几种
1、ViewState 对象为Null。
2、DateSet 空。
3、sql语句或Datebase的原因导致DataReader空。
4、声明字符串变量时未赋空值就应用变量。
5、未用new初始化对象。
6、Session对象为空。
7、对控件赋文本值时,值不存在。
8、使用Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值。
9、使用FindControl时,控件不存在却没有做预处理。
10、重复定义造成未将对象引用设置到对象的实例错误.
但在查询中报这个异常时,有很大几率是因为查询的数据在数据库里面有空值,输入的数据与数据库的数据进行比较时,匹配到空值就会抛异常。
当我们查询666 时就会出现下面的问题。
问题如下图。
原因: 查询的数据里面有空值 ,字段就会返回 null .
解决方法:其实是很简单的一个解决方法,就是我们在对数据库查询出来后的数据进行一个循环,循环查询出来的所有数据,然后在循环中判断 . 如果为null的话就给它赋值为一个空的字符串。这两者是有区别的, null会报错那我就给它一个空的字符串,这样就不会报错了。
if (!string.IsNullOrEmpty(strJglb))
{
foreach (var Jglblists in Jglblist)
{
if (Jglblists.Describe == null)
{
Jglblists.Describe = "";
}
}
Jglblist = Jglblist.Where(m => m.Jglb.Contains(strJglb) || m.Jglbm.Contains(strJglb) || m.Describe.Contains(strJglb)).ToList();
}
使用 foreach 循环给可以为空的字段赋值为一个空的字符串,当Describe 为null 时就给它赋值一个空的字符串。
这时再去查询问题就解决了。