Ich weiß, dass dies eine alte Frage ist, aber sie wurde nicht richtig beantwortet, also beantworte ich sie für andere, die möglicherweise auf dieses Problem stoßen.
Standardmäßig bindet ODP.net von Oracle Variablen nach Position und behandelt jede Position als neue Variable.
Jede Kopie als eine andere Variable zu behandeln und ihren Wert mehrmals festzulegen, ist eine Problemumgehung und ein Schmerz, wie furman87 erwähnt hat, und könnte zu Fehlern führen, wenn Sie versuchen, die Abfrage neu zu schreiben und Dinge zu verschieben.
Der richtige Weg besteht darin, die BindByName-Eigenschaft von OracleCommand wie folgt auf true zu setzen:
var cmd = new OracleCommand(cmdtxt, conn);
cmd.BindByName = true;
Sie könnten auch eine neue Klasse erstellen, um OracleCommand zu kapseln, indem Sie BindByName bei der Instanziierung auf true setzen, sodass Sie den Wert nicht jedes Mal festlegen müssen. Dies wird in diesem Beitrag besprochen