Использование оператора like в соединении odbc - PullRequest
1 голос
/ 01 марта 2011

Есть ли способ использовать инструкцию LIKE с использованием соединения ODBC в .net?Я перепробовал все, что мог придумать, но всегда получал исключение SQL.

SELECT field FROM table WHERE fieldName LIKE '%SOME_STRING%';
string sql = "SELECT field FROM table WHERE fieldName like '%?%';

Я использую Sybase SQL Anywhere 11.

1 Ответ

3 голосов
/ 01 марта 2011

Вы можете использовать оператор LIKE, если база данных, к которой вы подключаетесь, его поддерживает.Используете ли вы ODBC или нет, не должно иметь к этому никакого отношения.

Следует обратить внимание на то, что разные базы данных используют разные подстановочные знаки и разный синтаксис.(Например, MS Access использует «*» в качестве подстановочного знака, в то время как SQL Server использует «%»).

http://office.microsoft.com/en-us/access-help/like-operator-HP001032253.aspx

http://msdn.microsoft.com/en-us/library/ms179859.aspx

В любомОцените, посмотрите документацию для базы данных, к которой вы подключаетесь, чтобы узнать, поддерживает ли она оператор LIKE и правильный синтаксис.

или посмотрите ответы здесь: Параметризованные запросы с LIKEи условия IN

Редактировать

Я вижу, вы пытаетесь использовать входной параметр как часть предложения LIKE.Я не могу найти документацию по этому специфическому для Sybase, но даже на стороне SQL Server нам нужно (к сожалению) связать строку в этом случае.Я понимаю, что это плохо с точки зрения внедрения SQL, но я не верю, что есть способ обойти это, поэтому вам придется прибегнуть к дезинфекции / экранированию строки.

Вотопубликовать это в SQL Server.Надеемся, что это может привести к тому, что будет работать с Sybase ASA.http://palisade.plynt.com/issues/2006Jun/injection-stored-procedures/

В качестве крайней меры вы можете использовать это:

string sql = "SELECT field FROM table WHERE fieldName like '%" + SOMESTRING.Replace("'", "''") + "%';
...