Использование переменных связывания Oracle с LIKE в C # - PullRequest
13 голосов
/ 24 сентября 2010

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

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

Запрос

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

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

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 (недопустимое имя / значение).

Что я делаю не так?

1 Ответ

26 голосов
/ 24 сентября 2010

Попробуйте:

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

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

...