Как реализовать множественный поиск в Asp.Net - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу внедрить систему множественных поисковых запросов в Asp.Net, где поисковый ввод представлен в форме TEXTBOX и DROPDOWN LIST.Запрос должен работать в сочетании или индивидуально для фильтрации данных из SQL Server и отображения в Gridview.

Этот фрагмент кода предназначен для фильтрации двух раскрывающихся значений:

if (Agree_type_srch.SelectedValue != null || Status_srch.SelectedValue != null)
{
    if (Agree_type_srch.SelectedValue != null)
    {
        string connString = @"data source=ABC; database=XYZ; user id=sa; password=1234;";
        SqlConnection conn = new SqlConnection(connString);
        SqlCommand com = new SqlCommand("Select *from EntryDatabase where Agree_type ='" + Agree_type_srch.SelectedItem.Text + "'", conn);
        SqlDataAdapter sqldatad = new SqlDataAdapter();
        DataSet ds = new DataSet();

        com.Connection = conn;
        sqldatad.SelectCommand = com;

        using (DataTable dt = new DataTable())
        {
            sqldatad.Fill(dt);
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }

    }
    else if (Status_srch.SelectedValue != null)
    {
        string connString = @"data source=ABC; database=XYZ; user id=sa; password=1234;";
        SqlConnection conn = new SqlConnection(connString);
        SqlCommand com = new SqlCommand("Select *from EntryDatabase where Curnt_St ='" + Status_srch.SelectedItem.Text + "'", conn);
        SqlDataAdapter sqldatad = new SqlDataAdapter();
        DataSet ds = new DataSet();

        com.Connection = conn;
        sqldatad.SelectCommand = com;

        using (DataTable dt = new DataTable())
        {
            sqldatad.Fill(dt);
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
    }

    if (Agree_type_srch.SelectedItem.Text != null && Status_srch.SelectedItem.Text != null)
    {
        string connString = @"data source=ABC; database=XYZ; user id=sa; password=1234;";
        SqlConnection conn = new SqlConnection(connString);
        SqlCommand com = new SqlCommand("Select * from EntryDatabase where Agree_type ='" + Agree_type_srch.SelectedItem.Text + "'and Curnt_St ='" + Status_srch.SelectedItem.Text + "'", conn);
        SqlDataAdapter sqldatad = new SqlDataAdapter();
        DataSet ds = new DataSet();

        com.Connection = conn;
        sqldatad.SelectCommand = com;

        using (DataTable dt = new DataTable())
        {
            sqldatad.Fill(dt);
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
    }
...

1 Ответ

1 голос
/ 19 сентября 2019

Во-первых, использование конкатенации строк для предоставления параметров может привести к внедрению SQL, лучше использовать SqlParameter для передачи параметров.

Во-вторых, рассмотрите возможность деформации всех классов SqlClient с помощью области видимости, чтобыНе беспокойтесь, закройте / утилизируйте.

Наконец, для вашего вопроса вы можете использовать WHERE 1=1, а затем добавлять любые условия, которые вам нужны.Возьмите свой код как экземпляр.

string connString = @"data source=ABC; database=XYZ; user id=sa; password=1234;";
using (SqlConnection conn = new SqlConnection(connString))
{
    conn.Open();
    string query = "SELECT * FROM EntryDatabase WHERE 1=1";
    using (SqlCommand cmd = new SqlCommand())
    {
        cmd.Connection = conn;
        if (Agree_type_srch.SelectedValue != null)
        {
            query += " AND Agree_type = @agree_type";
            cmd.Parameters.AddWithValue("agree_type", Agree_type_srch.SelectedValue);
        }
        if (Status_srch.SelectedValue != null)
        {
            query += " AND Curnt_St = @curnt_st";
            cmd.Parameters.AddWithValue("curnt_st", Status_srch.SelectedValue);
        }
        cmd.CommandText = query;
        using (SqlDataAdapter sqldatad = new SqlDataAdapter())
        {
            DataSet ds = new DataSet();
            sqldatad.SelectCommand = cmd;

            using (DataTable dt = new DataTable())
            {
                sqldatad.Fill(dt);
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...