Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Manipulando ExecuteScalar() quando nenhum resultado é retornado


De acordo com a documentação do MSDN para DbCommand.ExecuteScalar:

Se a primeira coluna da primeira linha no conjunto de resultados não for encontrada, uma referência nula (Nothing no Visual Basic) será retornada. Se o valor no banco de dados for nulo, a consulta retornará DBNull.Value.

Considere o seguinte trecho:
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();
}

Em tempo de execução (testado no ODP.NET, mas deve ser o mesmo em qualquer provedor ADO.NET), ele se comporta assim:
  • Se a linha não existir, o resultado de command.ExecuteScalar() é nulo, que é então convertido em uma string nula e atribuído a getusername .
  • Se a linha existir, mas tiver NULL no nome de usuário (isso é possível no seu banco de dados?), o resultado de command.ExecuteScalar() é DBNull.Value , resultando em uma InvalidCastException .

De qualquer forma, a NullReferenceException não deve ser possível, então seu problema provavelmente está em outro lugar.