Domanda

I have a DataTable table. from that table I read value from a column, which is typeof(decimal). I try to cast this value to decimal? dec. When value is null, I get an exception. I tried it this way:

decimal? dec= row["myRow"] == null ? null : (decimal?)row["myRow"]; 
//this thorws "Specified cast is not valid." Exception

decimal? dec= myRdr["myValue"] == DBNull.Value ? null : (decimal?)myRdr["myValue"]; 
//this does NOT throw an Exception?? 

I tried the second solution when reading from SQL data table using SQLDataReader and it worked with no problems.

È stato utile?

Soluzione

As said in comments, DBNull.Value and null are not same thing. So when you are writing:

decimal? dec= row["myRow"] == null ? null : (decimal?)row["myRow"]; 

you are trying doing this:

if(DBNull.Value == null)
{
    return null;
}
else
{
    return (decimal?)row["myRow"];
}

which is false so the second part (in else)

(decimal?)row["myRow"];

is executed. This throws an exception.

But in second case:

if(DBNull.Value == DBNull.Value)
{
    return null;
}
else
{
    return (decimal?)row["myRow"];
}

is true so the cast statement is not executed and null is returned.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top