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

Zpracování ExecuteScalar(), když nejsou vráceny žádné výsledky

Podle dokumentace MSDN pro DbCommand.ExecuteScalar:

Pokud není nalezen první sloupec prvního řádku v sadě výsledků, je vrácena nulová reference (Nothing in Visual Basic). Pokud je hodnota v databázi null, dotaz vrátí DBNull.Value.

Zvažte následující úryvek:

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

Za běhu (testováno pod ODP.NET, ale mělo by být stejné u jakéhokoli poskytovatele ADO.NET) se chová takto:

  • Pokud řádek neexistuje, výsledek command.ExecuteScalar() je null, který je pak přetypován na nulový řetězec a přiřazen k getusername .
  • Pokud řádek existuje, ale má v uživatelském jménu hodnotu NULL (je to ve vaší databázi vůbec možné?), výsledek command.ExecuteScalar() je DBNull.Value , což má za následek InvalidCastException .

V každém případě NullReferenceException by nemělo být možné, takže váš problém je pravděpodobně jinde.



  1. Enum v režimu spánku, přetrvávající jako enum

  2. Použijte binární COPY tabulku FROM s psycopg2

  3. Seskupit podle měsíce a roku v MySQL

  4. Proč se doba provádění uložené procedury Oracle výrazně prodlužuje v závislosti na způsobu jejího provádění?