Oracle
 sql >> Database >  >> RDS >> Oracle

Gestione di ExecuteScalar() quando non vengono restituiti risultati

Secondo la documentazione MSDN per DbCommand.ExecuteScalar:

Se la prima colonna della prima riga nel set di risultati non viene trovata, viene restituito un riferimento nullo (Nothing in Visual Basic). Se il valore nel database è null, la query restituisce DBNull.Value.

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

In fase di esecuzione (testato in ODP.NET ma dovrebbe essere lo stesso in qualsiasi provider ADO.NET), si comporta in questo modo:

  • Se la riga non esiste, il risultato di command.ExecuteScalar() è null, che viene quindi convertito in una stringa nulla e assegnato a getusername .
  • Se la riga esiste, ma ha NULL nel nome utente (è possibile anche nel tuo DB?), il risultato di command.ExecuteScalar() è DBNull.Value , risultando in un InvalidCastException .

In ogni caso, la NullReferenceException non dovrebbe essere possibile, quindi il tuo problema probabilmente risiede altrove.