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 aangetusername. - Als de rij bestaat, maar NULL in gebruikersnaam heeft (is dit zelfs mogelijk in uw DB?), het resultaat van
command.ExecuteScalar()isDBNull.Value, wat resulteert in eenInvalidCastException.
In ieder geval de NullReferenceException zou niet mogelijk moeten zijn, dus uw probleem ligt waarschijnlijk ergens anders.