SQL LIKE поиск с несколькими текстовыми полями? - PullRequest
0 голосов
/ 30 апреля 2018

enter image description here

Вот код для моей кнопки.

private void btnStudentLookup_Click(object sender, EventArgs e)
    {
        string strConnect = "Server=DESKTOP- 
        2Q73COU\\SQLEXPRESS;Database=LoginApp;Trusted_Connection=True;";
        SqlConnection conn = new SqlConnection(strConnect);
        conn.Open();
        using (SqlConnection studentLookup = new SqlConnection(strConnect))
        {
            SqlCommand command =
                new SqlCommand("SELECT * FROM Main_Information WHERE [First Name] like '%" + txtFirstName.Text + "%';", studentLookup);

            SqlDataAdapter adapter = new SqlDataAdapter(command);
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            dgvAdvisor.DataSource = dt;
        }
    }

Все выше работает. Он отфильтровывает строки на основе имени. Тем не менее, я хотел бы отфильтровать больше, поэтому я добавляю это в строку:

"SELECT * FROM Main_Information WHERE [First Name] like '%" + txtFirstName.Text + "%' OR [Last Name] like '%" + txtLastName.Text + "%';", studentLookup

Теперь он просто ничего не делает. Нет ошибок, нет исключений, ничего. Любой совет?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

При тестировании приложения напишите в текстовом поле txtFirstName:

'; DELETE FROM Main_Information; --

И нажмите кнопку «Отправить».

если все работает, то отлично, если нет, тогда используйте SqlParameters для построения запроса с динамическими значениями

using (var connection = new SqlConnection(connectionString))
using (var command = connection.CreateCommand())
{
    var query = @"
        SELECT * FROM Main_Information
        WHERE [First Name] LIKE @firstName AND [Last Name] LIKE @lastName";
    var parameters = new [] 
    {
        new SqlParameter
        {
            ParameterName = "@firstName",
            SqlDbType = SqlDbType.VarChar,
            Value = $"%{txtFirstName.Text}%"
        },
        new SqlParameter
        {
            ParameterName = "@lastName",
            SqlDbType = SqlDbType.VarChar,
            Value = $"%{txtLastName.Text}%"
        }
    }   

    command.CommandText = query;
    command.Parameters.AddRange(parameters);

    connection.Open();

    var adapter = new SqlDataAdapter(command);
    var data = new DataTable();
    adapter.Fill(data);
    dgvAdvisor.DataSource = data;
}
0 голосов
/ 30 апреля 2018

Измените запрос, как показано ниже:

SELECT * FROM Main_Information WHERE [Имя] как '%' + txtFirstName.Text + "% ' И [Фамилия] как"% "+ txtLastName.Text +"%'; ", studentLookup

Используйте оператор AND вместо OR.

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