Oracle
 sql >> Database >  >> RDS >> Oracle

System.InvalidCastException:non è possibile eseguire il cast dell'oggetto da DBNull ad altri tipi

Come dice il messaggio di errore, il valore della cella è DBNull.Value e non può convertire da quello a quello che vuoi che sia (in questo caso un long o un int ). Devi controllare DBNull prima di convertire/trasmettere il numero:

Int64 id_riga = 0;
object value = (sender as DataGridView).Rows[e.RowIndex].Cells["column_ID"].Value;
if(value != DBNull.Value) 
    id_riga = Convert.ToInt64(value);

Poiché questo aggiunge qualche fastidioso sovraccarico, se fai così tanto probabilmente vorrai creare un metodo di supporto che lo faccia per te.

public static long? getLongFromDB(object value)
{
    if (value == DBNull.Value) return null;
    return Convert.ToInt64(value);
}

Allora il tuo codice può essere:

Int64 id_riga = getLongFromDB((sender as DataGridView).Rows[e.RowIndex].Cells["column_ID"].Value)
    .GetValueOrDefault();