在一个查询中从数据库中搜索多个数组索引值

时间:2014-02-17 01:53:09

标签: c# asp.net sql-server-2008

我正在从数据库进行搜索。用户将输入字符串。此字符串将转换为数组,然后将从表中检查此数组索引值以查找匹配项。 我使用循环遍历数组查询执行是在该循环中,它搜索正常,但如果有多个索引要搜索它显示最后索引搜索值。 我知道这不是一个正确的搜索方式。

我该怎么做。

SqlConnection conOpen;
string[] arrayList;
protected void Page_Load(object sender, EventArgs e)
{
    DataLayer datalayer = new DataLayer();
    conOpen = datalayer.connectionOpen();

    string myString = Request.QueryString["searchText"].ToString();
    char[] separator = new char[] { ' ' };
    arrayList = myString.Split(separator);
    for (int i = 0; i <= arrayList.GetUpperBound(0); i++)
    {
        Response.Write(arrayList[i]);

        string asd = arrayList[i];


        String arrayQuery = "Select * from tbl_products where product_name LIKE '%" + @asd + "%'";

        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(arrayQuery, conOpen);
        da.Fill(ds, "tbl_products");
        GridView1.DataSource = ds;
        GridView1.DataBind();
    }
}

1 个答案:

答案 0 :(得分:0)

我太清楚你的最终结果应该是什么,但我会猜测。我想您要问的是,您希望查询搜索用户放入input元素的搜索项的每个实例(由空格分隔),并将所有这些结果返回给GridView。好。所以我建议你循环“构建”你的sql语句然后运行sql并在循环之后绑定数据(不是在期间)。

另一个重要因素是,您最应该参数化这些值,因为它来自用户输入以防止SQL注入。请原谅任何错别字(已经很晚了)。

        DataLayer datalayer = new DataLayer();
        conOpen = datalayer.connectionOpen();

        string myString = Request.QueryString["searchText"].ToString();
        char[] separator = new char[] { ' ' };
        arrayList = myString.Split(separator);
        StringBuilder arrayQuery = new StringBuilder();
        SqlCommand myCommand = new SqlCommand();

        for (int i = 0; i < arrayList.Length; i++)
        {
            if (i==0)
            {
                arrayQuery.Append("Select * from tbl_products where product_name LIKE @asd" + i);
            } else{
                arrayQuery.Append(" OR product_name LIKE @asd" + i );
            }

            myCommand.Parameters.AddWithValue("@asd" + i, "%" + arrayList[i] + "%");
        }

        myCommand.CommandText = arrayQuery.ToString();
        myCommand.Connection = conOpen;
        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(myCommand);
        da.Fill(ds, "tbl_products");
        GridView1.DataSource = ds;
        GridView1.DataBind();