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

Obsługa ExecuteScalar(), gdy nie są zwracane żadne wyniki

Zgodnie z dokumentacją MSDN dla DbCommand.ExecuteScalar:

Jeśli nie zostanie znaleziona pierwsza kolumna pierwszego wiersza w zestawie wyników, zwracane jest odwołanie anull (Nic w Visual Basic). Jeśli wartość w bazie danych jest null, zapytanie zwraca DBNull.Value.

Rozważ następujący fragment:

using (var conn = new OracleConnection(...)) {
    conn.Open();
    var command = conn.CreateCommand();
    command.CommandText = "select username from usermst where userid=2";
    string getusername = (string)command.ExecuteScalar();
}

W czasie wykonywania (testowane pod ODP.NET, ale powinno być takie samo pod dowolnym dostawcą ADO.NET), zachowuje się tak:

  • Jeśli wiersz nie istnieje, wynik command.ExecuteScalar() ma wartość null, która jest następnie rzutowana na łańcuch o wartości null i przypisywana do getusername .
  • Jeśli wiersz istnieje, ale ma NULL w nazwie użytkownika (czy jest to w ogóle możliwe w Twojej bazie danych?), wynik command.ExecuteScalar() to DBNull.Value , co skutkuje InvalidCastException .

W każdym razie NullReferenceException nie powinno być możliwe, więc Twój problem prawdopodobnie leży gdzie indziej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstawianie nowych kolumn na środku tabeli?

  2. Autoinkrementacja w Oracle do już utworzonej tabeli

  3. Przykład Oracle UTL_HTTP Post Multipart/Form-Data (JSON i ZIP)

  4. Dostrajanie wydajności PL/SQL dla zapytań z symbolami wieloznacznymi LIKE '%...%'

  5. Jak usunąć „Wybrano X wierszy” w SQLcl i SQL*Plus (Oracle)