Я новичок в использовании подготовленных операторов для запроса данных из базы данных, и у меня возникают проблемы с реализацией параметров для 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 используется в нескольких частях запроса.В реальной жизни этот запрос несколько раз использовал один и тот же параметр, и было бы неудобно добавлять более одного параметра с одинаковым именем и значением.