Refracted Paladin
Refracted Paladin

Reputation: 12216

How can DBNull not equal DBNull

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!

Upvotes: 8

Views: 9878

Answers (3)

Tj Kellie
Tj Kellie

Reputation: 6476

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) 

Upvotes: 6

SolutionYogi
SolutionYogi

Reputation: 32233

Try using

Convert.IsDBNull method.

Upvotes: 7

Yevhen
Yevhen

Reputation: 1965

may be such comparison helps

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

or

if (o is DBNull)

Upvotes: 1

Related Questions