Строковый параметр поставщика SQL OleDb - как он работает? - PullRequest
0 голосов
/ 17 июля 2011

Я использую визуальный инструмент набора данных .xsd, чтобы помочь мне построить SQL DAL.К сожалению, сервер, к которому я подключаюсь, - это SQL Server 2000. Поэтому из VS 2010 единственным поставщиком, которого я нашел, был поставщик OLE DB.Это имеет некоторые недостатки.Например, ? вместо именованных параметров и т. Д.

У меня проблема с запросом текстовой части.Запрос в конструкторе выглядит следующим образом:

SELECT * FROM table WHERE nvarcharcolumn1 LIKE '%' + ? + '%'

Это прекрасно работает из конструктора, когда я вставляю значение для этого ? как %.% не работает и не работает ''.

Но после того, как я использую xsd «Предварительный просмотр данных», он не работает ни с одним из этих значений.И при вызове из кода C # он тоже не работает.

Как правильно использовать строковые параметры, когда я хочу отфильтровать по части строки и в конечном итоге разрешить пропуск этого параметра (одна возможность - создатьзапрос для каждой комбинации необязательных параметров, но это слишком много избыточного кода IMO).

Ответы [ 2 ]

0 голосов
/ 12 декабря 2011

Способ настройки строки откроет вам возможность SQL-инъекции. Вы должны действительно использовать параметры что-то вроде

OleDbCommand cmd = new OleDbCommand( "SELECT * FROM table WHERE nvarcharcolumn1 LIKE ?", yourConnection );
cmd.Parameters.AddWithValue( "QmarkPlaceHolder", "%" + ValueLookingFor + "%" );

затем продолжите выполнение вашего запроса

0 голосов
/ 11 декабря 2011
SELECT * FROM table WHERE nvarcharcolumn1 LIKE '%<part of a string you want to search>%'
...