Domanda

Perché ottengo questo errore?

Object cannot be cast from DBNull to other types.

quando si inserisce il valore null per un tipo di dati numerici in SQL Server 2005

Ecco il mio codice,

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

Modifica :

E 'questo diritto ??

 materialIn.measurementId = (Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) != 0) ? Convert.ToInt64(DlMeasurement.SelectedValue.ToString()) : 0;
È stato utile?

Soluzione

Non è possibile convertire DBNull.Value a Int64 il tuo codice tenta di fare in Convert.ToInt64. DBNull.Value significa "sconosciuto" o "inesistente" e quindi non v'è alcuna conversione logica a qualsiasi altro tipo di dati.

Se l'istanza materialIn è una qualche forma di DataRow fortemente tipizzato, avrà un metodo SetMeasurementIdNull, che è ciò che è necessario utilizzare. Se stai usando LINQ to SQL o EF, non dovrebbe essere necessario a che fare con DBNull a tutti, si sarebbe invece solo scrivere materialIn.measurementId = null.

Altri suggerimenti

A causa che Object cannot be cast from DBNull to other types.

Quindi quello che dovete fare è quello di verificare il valore per DBNull.

  

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

DBNull non si converte in un Int64. Sarà necessario utilizzare un int nullable e quindi memorizzare null nel valore o fare qualcosa con il valore di rappresentare nulla come ad esempio 0 che possono essere memorizzati nella vostra proprietà.

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