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