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