oracle字段存入NaN值后查询显示为0问题

今天发现了一件古怪的事情。C#代码运算过程中,不小心将一个Number型字段赋了NaN值,并保存到数据库,之后NHibernate就无法构造这条记录对应的对象了,提示什么

NHibernate.Exceptions.GenericADOException
  HResult=0x80131600
  Message=could not initialize a collection:

查阅数据库,如果用pl/sql developer,可以看到该字段显示为0,然后,它实际上又不等于0:
1、在pl/sql developer中,查询结果为0
在这里插入图片描述
2、实际上,它不等于0:
在这里插入图片描述
3、它好像是大于0:
在这里插入图片描述
4、它好像又不是NaN
在这里插入图片描述
5、在sqlplus中,它查询结果为空:
在这里插入图片描述

6、所以,它究竟是什么?

实在搞不懂,只好先记下来,转头去研究茴香豆的茴字,究竟有多少种写法。至于代码中,我暂时在实体类中加了防御:

double? tide_abs_rate1;
public virtual double? Tide_abs_rate1
{
    get
    {
        return tide_abs_rate1;
    }
    set
    {
        tide_abs_rate1 = (value is Double.NaN) ? 0 : value;
    }
}

2023.04.25
oracle表中,如果不小心存入了这种Double.NaN,真的很难发现,同时也很难通过什么检索条件将它找出来,什么 is nan,is NANVL(字段名,替换值),都不好使。不过,今天发现了,这个值无限逼近1,或许可以通过 >0.99999 and <1来筛选。这个9,喜欢写多少个就多少个。
在这里插入图片描述

posted on 2023-02-27 17:15  左直拳  阅读(0)  评论(0)    收藏  举报  来源

导航