Der ODP.Net-Provider von Oracle verwendet standardmäßig bind by position. Um das Verhalten zu ändern, um nach Namen zu binden. Setzen Sie die Eigenschaft BindByName auf true. Dann können Sie auf die doppelte Definition von Parametern verzichten.
using(OracleCommand cmd = con.CreateCommand()) {
...
cmd.BindByName = true;
...
}