views:

469

answers:

3

Why i get this error?

Object cannot be cast from DBNull to other types.

when i inserted null value for a numeric datatype in sql server 2005

Here is my code,

 if (MeasurementTr.Visible == true)
    {
        materialIn.measurementId = Convert.ToInt64(DlMeasurement.SelectedValue.ToString());
    }
    else
    {
        materialIn.measurementId = Convert.ToInt64(DBNull.Value);
    }

EDIT :

Is this right??

 materialIn.measurementId = (Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) != 0) ? Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) : 0;
+1  A: 

Because that Object cannot be cast from DBNull to other types.

So what you need to do is to check the value for DBNull.

materialIn.measurementId = DlMeasurement.SelectedValue == DBNull.Value ? 0 : Convert.ToInt64(DlMeasurement.SelectedValue.ToString());

Mendy
@Mendy Operator '==' cannot be applied to operands of type 'string' and 'System.DBNull'
bala3569
But SelectedValue is object, isn't it?
Mendy
@Mendy Can you edit my question with right answer
bala3569
I don't sure what did you ask...
Mendy
+4  A: 

You cannot convert DBNull.Value to Int64 as your code attempts to do in Convert.ToInt64. DBNull.Value means "unknown" or "nonexistent" and therefore there is no logical conversion to any other data type.

If the materialIn instance is some form of strongly-typed DataRow, it will have a SetMeasurementIdNull method, which is what you need to use. If you're using Linq to SQL or EF, you shouldn't need to deal with DBNull at all, you would instead just write materialIn.measurementId = null.

Aaronaught
A: 

DBNull doesn't convert to an Int64. You will need to use a nullable int and then store null in the value or do something with the value to represent null such as 0 that can be stored in your property.

Kelsey