sql >> Databáze >  >> RDS >> Oracle

System.InvalidCastException:Objekt nelze přetypovat z DBNull na jiné typy

Jak říká chybová zpráva, hodnota buňky je DBNull.Value a nemůže se z toho převést na to, co chcete, aby to bylo (v tomto případě long nebo int ). Musíte zkontrolovat DBNull před převodem/vysláním čísla:

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);

Vzhledem k tomu, že to přidává nepříjemné režii, pokud děláte tolik, pravděpodobně budete chtít vytvořit pomocnou metodu, která to udělá za vás.

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

Pak váš kód může být:

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


  1. Připojení JDBC přestane reagovat bez odezvy ze serveru SQL Server 2008 r2

  2. Použijte LIMIT k stránkování výsledků v dotazu MySQL

  3. Co je Percona DB

  4. externí databáze s Adobe CQ5?