How can DBNull not equal DBNull

2019-04-25 08:23发布

I have the following line of code

if (DBNull.Value.Equals(o) || o != null)

where o is object o in row.ItemArray I keep getting an error of -->

Xml type "List of xdt:untypedAtomic" does not support a conversion from Clr type "DBNull" to Clr type "String".

What I don't understand is that when I step through my code this if should be catching this and performing my alternate action but it does not?

Can someone please shed some light for me.

Thank you!

3条回答
疯言疯语
2楼-- · 2019-04-25 08:40

I think you problem is that in fact

DBNull.Value == null 
//is always false

The DBNull is a special class for comparisons on values returned from the dB so you actualy need to check for a null condition AND a DBNull.value if your array contains both.

EDIT: Sorry looking closer at your code you may just need to reverse your OR operation. If o == null your first statement will blow up with your exception. Try:

if (o != null || o == DBNull.Value) 
查看更多
ゆ 、 Hurt°
3楼-- · 2019-04-25 08:47

Try using

Convert.IsDBNull method.

查看更多
smile是对你的礼貌
4楼-- · 2019-04-25 08:55

may be such comparison helps

if ( !o.GetType().Equals( DBNull.Value ) )

or

if (o is DBNull)

查看更多
登录 后发表回答