sql >> Database >  >> RDS >> Oracle

Uitvoeren van ExecuteScalar() wanneer er geen resultaten worden geretourneerd

Volgens MSDN-documentatie voor DbCommand.ExecuteScalar:

Als de eerste kolom van de eerste rij in de resultatenset niet wordt gevonden, wordt een anull-verwijzing (Niets in Visual Basic) geretourneerd. Als de waarde in de database null is, retourneert de query DBNull.Value.

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

Tijdens runtime (getest onder ODP.NET maar zou hetzelfde moeten zijn onder elke ADO.NET-provider), gedraagt ​​​​het zich als volgt:

  • Als de rij niet bestaat, het resultaat van command.ExecuteScalar() is null, die vervolgens wordt gecast naar een null-tekenreeks en wordt toegewezen aan getusername .
  • Als de rij bestaat, maar NULL in gebruikersnaam heeft (is dit zelfs mogelijk in uw DB?), het resultaat van command.ExecuteScalar() is DBNull.Value , wat resulteert in een InvalidCastException .

In ieder geval de NullReferenceException zou niet mogelijk moeten zijn, dus uw probleem ligt waarschijnlijk ergens anders.



  1. Kan database niet verwijderen

  2. DBTIMEZONE-functie in Oracle

  3. Hoe invoer-uitvoerparameters in SQL Server opgeslagen procedure/functie te declareren?

  4. MySQL-prestaties:lange zoekopdrachten identificeren