Vím, že je to stará otázka, ale nebyla správně zodpovězena, takže na ni odpovídám pro ostatní, kteří se mohou s tímto problémem setkat.
Ve výchozím nastavení Oracle ODP.net váže proměnné podle pozice a zachází s každou pozicí jako s novou proměnnou.
Zacházet s každou kopií jako s jinou proměnnou a nastavit její hodnotu vícekrát je řešením a bolestí, jak zmínil furman87, a mohlo by vést k chybám, pokud se pokoušíte přepsat dotaz a přesunout věci.
Správným způsobem je nastavit vlastnost BindByName OracleCommand na true, jak je uvedeno níže:
var cmd = new OracleCommand(cmdtxt, conn);
cmd.BindByName = true;
Můžete také vytvořit novou třídu pro zapouzdření OracleCommand nastavením BindByName na true při vytváření instance, takže nemusíte nastavovat hodnotu pokaždé. Toto je diskutováno v tomto příspěvku