我今天在调试代码时遇到了一个奇怪的情况。
正如屏幕截图所示,我有object obj
从System.Data.OracleClient
ExecuteScalar()
得到一个值。
将屈服值分配给变量obj,它清楚地显示了一个null,但是执行已经进入if (obj != null)
语句,技术上不应该。有什么想法吗?我想知道我的代码是否正确?
答案 0 :(得分:10)
尝试使用DBNull.Value
代替
if(obj != DBNull.Value)
答案 1 :(得分:4)
可以使用DBNull.Value,
null不是任何类型的实例。相反,它是无效的参考。
但是,System.DbNull.Value是对System.DbNull实例的有效引用(System.DbNull是单例,System.DbNull.Value为您提供对该类的单个实例的引用),表示不存在*数据库中的值。
答案 2 :(得分:1)
ExecuteOracleScalar
的文档说它执行查询,并将查询返回的结果集中第一行的第一列作为特定于Oracle的数据类型<返回/强>&#34;
据我所知,结果可能是OracleNumber
,例如屏幕截图显示的属性IsNull
和Value
。