Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Behandlung von ExecuteScalar(), wenn keine Ergebnisse zurückgegeben werden

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ück

Betrachten 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 und getusername zugewiesen wird .
  • Wenn die Zeile existiert, aber NULL im Benutzernamen hat (ist das in Ihrer DB überhaupt möglich?), das Ergebnis von command.ExecuteScalar() ist DBNull.Value , was zu einer InvalidCastException führt .

In jedem Fall die NullReferenceException sollte nicht möglich sein, also liegt dein Problem wahrscheinlich woanders.