Tôi biết đây là một câu hỏi cũ, nhưng nó chưa được giải quyết chính xác, vì vậy tôi đang trả lời câu hỏi đó cho những người khác có thể gặp sự cố này.
Theo mặc định, ODP.net của Oracle liên kết các biến theo vị trí và coi mỗi vị trí là một biến mới.
Việc coi mỗi bản sao là một biến khác nhau và đặt giá trị của nó nhiều lần là một cách giải quyết và là một vấn đề khó khăn, như furman87 đã đề cập và có thể dẫn đến lỗi, nếu bạn đang cố gắng viết lại truy vấn và di chuyển mọi thứ.
Cách đúng là đặt thuộc tính BindByName của OracleCommand thành true như sau:
var cmd = new OracleCommand(cmdtxt, conn);
cmd.BindByName = true;
Bạn cũng có thể tạo một lớp mới để đóng gói OracleCommand, thiết lập BindByName thành true khi khởi tạo, vì vậy bạn không phải đặt giá trị mỗi lần. Điều này được thảo luận trong bài đăng này