Я новичок в использовании подготовленных операторов для запроса данных из базы данных, и у меня возникли проблемы с реализацией параметров для C #, в частности OracleParameters.
Допустим, у меня есть следующий SQL:
string sql = "select *
from table1 t1, table2 t2
where t1.columnX = @parm and t2.columnY = @parm"
И код такой:
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
Проблема в том, что когда запускается cmd, t1.columnX получает значение strParm, но когда t2.columnY вот-вот получит значение strParm, он выдает исключение «ORA-01008: не все переменные связаны».
Мне кажется, что параметр может быть заменен только один раз, даже если этот параметр находится где-то еще в sql.
Одно из решений, которое я пробовал и которое у меня работает:
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
Другое решение:
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm1", strParm));
cmd.Parameters.Add(new OracleParameter("@parm2", strParm));
, а модифицированный sql - это:
string sql = "select *
from table1 t1, table2 t2
where t1.columnX = @parm1 and t2.columnY = @parm2"
Вопрос в том, есть ли лучший способ сделать это, чтобы я не нужно добавлять еще один параметр с тем же значением.
Примечание: я просто упростил приведенный выше запрос, чтобы показать, что @parm используется в нескольких частях запроса. В реальной жизни в этом запросе один и тот же параметр использовался несколько раз, и неудобно добавлять более одного параметра с одним и тем же именем и значением.