Jeg ved, at dette er et gammelt spørgsmål, men det er ikke blevet besvaret korrekt, så jeg besvarer det for andre, der kan løbe ind i dette problem.
Som standard binder Oracles ODP.net variable efter position og behandler hver position som en ny variabel.
At behandle hver kopi som en anden variabel og indstille dens værdi flere gange er en løsning og en smerte, som furman87 nævnte, og kan føre til fejl, hvis du forsøger at omskrive forespørgslen og flytte rundt på tingene.
Den korrekte måde er at indstille BindByName-egenskaben for OracleCommand til true som nedenfor:
var cmd = new OracleCommand(cmdtxt, conn);
cmd.BindByName = true;
Du kan også oprette en ny klasse til at indkapsle OracleCommand ved at indstille BindByName til sand ved instansiering, så du ikke behøver at indstille værdien hver gang. Dette diskuteres i dette indlæg