Как правильно экранировать SQL при использовании свойства Filter BindingSource - PullRequest
0 голосов
/ 13 сентября 2010

Я унаследовал приложение C #, которое перечисляет данные из таблицы базы данных через DataGridView. Есть также несколько текстовых полей, используемых для фильтрации этих данных. Это делается так:

String listFilter = string.Format("City = '{0}'", this.toolStripSearch.Text);
this.customersBindingSource.Filter = listFilter;

toolStripSearch - текстовое поле для поиска по названию города. Проблема в том, что нет выхода из SQL. Добавление цитаты в поле приводит к сбою приложения.

Каков правильный способ экранирования SQL здесь?

1 Ответ

1 голос
/ 13 сентября 2010

Я думаю, что «правильный» способ для BindingSource.Filter - просто избегать одинарных кавычек, используя '', настолько ужасный, насколько это звучит. Например, что-то вроде.

String listFilter = string.Format("City = '{0}'", this.toolStripSearch.Text.Replace("'", "''")); 
this.customersBindingSource.Filter = listFilter;  

Свойство Filter использует тот же синтаксис, что и выражения DataColumn, когда BindingSource привязан к данным из базы данных.

http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.filter.aspx

Документацию по необходимому синтаксису можно найти здесь:

http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

По этой ссылке:

Строковые значения должны быть заключены в одинарных кавычках (и каждый отдельный символ кавычки в строковое значение должно быть экранировано предваряя его еще одним синглом кавычка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...