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 agetusername
. - 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 umaInvalidCastException
.
De qualquer forma, a
NullReferenceException
não deve ser possível, então seu problema provavelmente está em outro lugar.