O provedor ODP.Net da Oracle usa bind por posição como padrão. Para alterar o comportamento para vincular por nome. Defina a propriedade BindByName como true. Do que você pode descartar a dupla definição de parâmetros.
using(OracleCommand cmd = con.CreateCommand()) {
...
cmd.BindByName = true;
...
}