Wiem, że to stare pytanie, ale nie zostało ono poprawnie rozwiązane, więc odpowiadam na nie innym, którzy mogą napotkać ten problem.
Domyślnie ODP.net Oracle wiąże zmienne według pozycji i traktuje każdą pozycję jako nową zmienną.
Traktowanie każdej kopii jako innej zmiennej i wielokrotne ustawianie jej wartości jest obejściem i problemem, jak wspomniał furman87, i może prowadzić do błędów, jeśli próbujesz przepisać zapytanie i przenosić różne elementy.
Prawidłowym sposobem jest ustawienie właściwości BindByName OracleCommand na true, jak poniżej:
var cmd = new OracleCommand(cmdtxt, conn);
cmd.BindByName = true;
Można również utworzyć nową klasę do hermetyzacji OracleCommand, ustawiając BindByName na true podczas tworzenia, dzięki czemu nie trzeba ustawiać wartości za każdym razem. Zostało to omówione w tym poście