sql >> Base de Datos >  >> RDS >> Oracle

Manejo de ExecuteScalar() cuando no se devuelven resultados

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 a getusername .
  • 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() es DBNull.Value , lo que resulta en una InvalidCastException .

En cualquier caso, la NullReferenceException no debería ser posible, por lo que su problema probablemente se encuentre en otra parte.