Laut MSDN-Dokumentation für DbCommand.ExecuteScalar:
Wenn die erste Spalte der ersten Zeile im Resultset nicht gefunden wird, wird ein Nullverweis (Nothing in Visual Basic) zurückgegeben. Wenn der Wert in der Datenbank null ist, gibt die Abfrage DBNull.Value.
zurückBetrachten Sie das folgende Snippet:
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();
}
Zur Laufzeit (getestet unter ODP.NET, sollte aber unter jedem ADO.NET-Anbieter gleich sein) verhält es sich wie folgt:
- Wenn die Zeile nicht existiert, das Ergebnis von
command.ExecuteScalar()
ist null, die dann in eine Nullzeichenfolge umgewandelt undgetusername
zugewiesen wird . - Wenn die Zeile existiert, aber NULL im Benutzernamen hat (ist das in Ihrer DB überhaupt möglich?), das Ergebnis von
command.ExecuteScalar()
istDBNull.Value
, was zu einerInvalidCastException
führt .
In jedem Fall die NullReferenceException
sollte nicht möglich sein, also liegt dein Problem wahrscheinlich woanders.