SQL Частично выполняет поиск пользователей

#sql-server #razor-2 #asp.net-webpages

#sql-сервер #razor-2 #asp.net-веб-страницы

Вопрос:

Мне нужно попробовать частично выполнить поиск пользователей, прямо сейчас мой код находит результаты только на основе ТОЧНОГО имени пользователя. Как я могу это сделать?

Мой код можно найти ниже, пожалуйста, обратите внимание, что я использую «@0», что каким-то образом мешает мне использовать %@0%.

 Here's my code:
@{
    Layout = "~/Admin/_SiteLayout.cshtml";

    var db = Database.Open("MikZeRCoding2");
    var userSearchQuery = "SELECT * FROM [Users] WHERE UserName = @0";

    var UsernameSearch = "";
    var ErrorMessage = "";
    var searchString = Request.Form["search-username"];

    if (IsPost) {
        UsernameSearch = Request.Form["search-username"];

        if (UsernameSearch.IsEmpty()) {
            ErrorMessage = "You didn't search for anything.";
        }

        if (!UsernameSearch.IsEmpty() amp;amp; db.QueryValue(userSearchQuery, UsernameSearch) == null) {
            ErrorMessage = "No results for '"   searchString   "' were found...";
        }

        if (searchString == "bitch") {
            ErrorMessage = "Bitch spotted in-front of your pc monitor.";
        }

        else {

        }
    }
}

<form method="post" action="">
    <div class="input-group">
        <input type="text" name="search-username" placeholder="Search for a user" class="form-control" />
        <span class="input-group-btn">
            <button class="btn btn-default glyphicon glyphicon-search" type="button"></button>
        </span>
    </div>
    <input type="submit" value="Search" />

    @foreach(var user in db.Query(userSearchQuery, UsernameSearch)) {
        <a href="@Href("~/Admin/Accounts/User", user.UserId)"><span>[ @user.UserId ]</span>  @user.UserName</a>
    }
    @if(!ErrorMessage.IsEmpty()) {
        <div class="alert alert-danger">@ErrorMessage</div>
    }
</form>
  

Ответ №1:

Я думаю, вы должны быть в состоянии сделать:

 var userSearchQuery = "SELECT * FROM [Users] WHERE UserName LIKE '%'   @0   '%'";
  

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

Ничего не возвращать, когда @0 пусто:

 var userSearchQuery = "SELECT * FROM [Users] WHERE UserName LIKE '%'   @0   '%' and @0 <> ''";
  

Комментарии:

1. Это действительно работает, спасибо!! Однако, к сожалению, когда я делаю это и захожу на страницу, на которой включено окно поиска, кажется, что оно выводит КАЖДОГО пользователя, затем, когда я ищу что-то вроде «использовать», появляется только «Пользователь», если вы понимаете, что я имею в виду:P Есть какой-нибудь способ исправить это?

2. @user3250722 . . . Вы говорите, что когда строка поиска пуста, она возвращает всех пользователей. Что он должен возвращать?

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