Подтвердить что ты не робот

Использование переменных привязки Oracle с LIKE в С#

В рамках попытки прекратить использование динамической генерации SQL и поощрять использование переменных привязки, я сталкиваюсь с некоторыми проблемами.

Я запрашиваю базу данных Oracle 9i со страницы ASP.NET с использованием Oracle Data Providers for.NET.

Запрос

sql = "SELECT somedata FROM sometable WHERE machine = :machineName ";

Я определяю Oracle Parameter следующим образом

OracleParameter parameter = new OracleParameter();
parameter.ParameterName = "machineName";
parameter.OracleDbType = OracleDbType.Varchar2;
parameter.Value = machine; //machine is a variable of type string
parameterList.Add(parameter);

Это отлично работает для оператора "=". Но я просто не могу заставить его работать с "LIKE". Я не знаю, как отформатировать запрос, чтобы он принял использование шаблона "%".

Я пробовал:

sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName% ";
sql = "SELECT somedata FROM sometable WHERE machine LIKE ':machineName%' ";
sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName||% ";

а также:

parameter.Value = machine+'%';

но все, что я получаю, это ORA-00911 (незаконный символ) и исключения ORA-01036 (незаконное имя/значение).

Что я делаю неправильно?

4b9b3361

Ответ 1

Try:

sql = "SELECT somedata FROM sometable WHERE machine LIKE :machineName || '%' ";

Из-за переменной BIND в ней не должно быть одинарных кавычек. Но% нет, поэтому я ожидаю, что он будет инкапсулирован.