Según la documentación de MSDN para DbCommand.ExecuteScalar:
Si no se encuentra la primera columna de la primera fila del conjunto de resultados, se devuelve una referencia nula (Nada en Visual Basic). Si el valor de la base de datos es nulo, la consulta devuelve DBNull.Value.
Considere el siguiente fragmento:
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();
}
En tiempo de ejecución (probado bajo ODP.NET pero debería ser el mismo bajo cualquier proveedor ADO.NET), se comporta así:
- Si la fila no existe, el resultado de
command.ExecuteScalar()
es nulo, que luego se convierte en una cadena nula y se asigna agetusername
. - Si la fila existe, pero tiene NULL en el nombre de usuario (¿es esto posible en su base de datos?), el resultado de
command.ExecuteScalar()
esDBNull.Value
, lo que resulta en unaInvalidCastException
.
En cualquier caso, la NullReferenceException
no debería ser posible, por lo que su problema probablemente se encuentre en otra parte.