維護舊專案大量使用 OleDbConnection(Oracle 10g),對參數順序與命名參數行為不清。測試發現雖支援命名參數,但參數綁定順序仍依 SQL 中出現順序,而非參數集合添加順序。
insert into B(A,B) values(:a,:b),參數加入 a、b → 正確存入 a、b。insert into B(B,A) values(:b,:a),參數加入 a、b → 實際存入 b、a(錯位)。select ... where a=:a and b=:b ... insert values(:a,:b) → 正確。where b=:b and a=:a → 參數綁定錯位,存入 b、a。結論:OleDbCommand 以參數在 SQL 文本中**首次出現順序**綁定參數集合中的同名參數,與添加順序無關。使用區塊語句時特別需注意 WHERE 條件與 VALUES 子句中參數出現順序一致。