2017-01-31 9 views
0

У меня есть запрос, который получает некоторую информацию из базы данных на сервере MSSQL, как это:Использование% объявлений в строке для оператора «как» для фильтрации результатов запроса

String sql = "select Name from Projects where Name NOT IN (select Project_Name from vDays) and Name like @filterText order by Name"; 

У меня есть текстовое поле, позволяющее пользователь вводит текст для фильтрации проектов, возвращаемых по имени, при использовании символа% до, после или вокруг текста. Это отлично работает, если пользователь не вводит ничего, начиная с %ad. Когда это происходит, отладчик (используя VS2010) показывает текст как . Это, конечно, передается в запрос и не возвращает правильную информацию.

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

Update:

Хорошо, так что изменение происходит, когда я иду на другую страницу с помощью Response.Redirect и отправок значения текстового поля с ним.

filterText = FilterTextBox.Text; 
Response.Redirect("UnusedProjects_Results.aspx?filterText=" + filterText); 

filterText показывает %ad должным образом.

Затем на следующей странице:

string filterText = ""; 
filterText = Request.QueryString["filterText"]; 

filterText показывает

Как @ DavidT.Macknet сказал в комментарии, это, кажется, из-за кодирования URL. Есть ли способ сохранить эти символы% без кодирования? Если нет, я всегда могу изменить его, чтобы пользователь ввел * вместо этого, а затем замените все * на % до того, как возникнут запросы.

+1

Это URL-кодированное значение, может быть? http://www.w3schools.com/tags/ref_urlencode.asp –

+0

Стреляй, да, похоже, что это все. Собираюсь обновить свой вопрос. Благодаря! – pfinferno

ответ

2

Вы должны кодировать filterText на линии

Response.Redirect("UnusedProjects_Results.aspx?filterText=" + filterText); 

с Ури кодирования. Хорошим инструментом для этого является Uri.EscapeDataString, это more reliable, чем с использованием HttpUtility.UrlEncode. Это то, что вы увидите в большинстве примеров кода.

Response.Redirect("UnusedProjects_Results.aspx?filterText=" + Uri.EscapeDataString(filterText)); 

Это будет кодировать % символ поэтому он получает правильно разобранную после редирект происходит.

+0

Это работает отлично. – pfinferno