Oracle
 sql >> Baza danych >  >> RDS >> Oracle

System.InvalidCastException:nie można rzutować obiektu z DBNull na inne typy

Jak mówi komunikat o błędzie, wartość komórki to DBNull.Value i nie może przekonwertować z tego na cokolwiek chcesz (w tym przypadku long lub int ). Musisz sprawdzić DBNull przed konwersją/przesyłaniem numeru:

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

Ponieważ dodaje to trochę irytującego obciążenia, jeśli robisz tak dużo, prawdopodobnie będziesz chciał stworzyć metodę pomocniczą, która zrobi to za Ciebie.

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

Wtedy Twój kod może być:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ostatnie słowo w zdaniu:W SQL (możliwe wyrażenia regularne?)

  2. Zapytanie do sprawdzenia, czy elementy istnieją w grupie partycji

  3. Zapytanie z uszkodzonym podselekcję powinno skutkować błędem, ale zwraca wiersze

  4. Znajduje się w kursorze, gdy warunek jest spełniony

  5. Maskowanie danych Oracle