我正在使用3层架构来开发网站。我需要开发搜索功能,以根据搜索栏中的用户类型显示产品。当我调试时,我看到搜索值没有传递给ProductBL的GetProductInfo页面。 这是代码:
$ ls -1 tstdir/[mf]2
tstdir/f2
tstdir/m2
GetProductInfo方法的ProductBL代码:
protected void Search(object sender, EventArgs e)
{
string searchString = Request.QueryString["ProductName"];
Product product = new Product();
product.ProductName = txtSearch.Text.Trim();
ProductBL.GetProductInfo(searchString);
}
Gridview页面:
public static DataTable GetProductInfo(string searchString)
{
string query = "SELECT * FROM [Products] where ProductName like @SearchString and Visible = 1";
SqlCommand cmd = new SqlCommand(query);
cmd.Parameters.AddWithValue("@SearchString", SqlDbType.Text).Value = searchString;
return DbUtility.GetRecordsInDataTable(cmd);
}
请帮助我
答案 0 :(得分:0)
您尚未正确设置查询。首先尝试在SQL
编辑器中检查您的查询。
问题出在这里。
like @SearchString
将其更改为以下内容
SELECT * FROM [Products] where ProductName like '%SearchString%' and Visible = 1
如果Products
表中有记录,那么它将通过查询获取。
另请参阅如何使用通配符
https://support.microsoft.com/en-in/kb/98434
希望有所帮助。
答案 1 :(得分:0)
这似乎是您的通配符条件错误: 每条评论都要改变您的查询,如下所示。
string query = "SELECT * FROM [Products] where ProductName like where name like '%' + replace(SearchString, '%', '[%]') + '%' and Visible = 1";
此处您的查询似乎是:select * from tablename where Column like '%[%]%'
它会给你更合适的结果。
答案 2 :(得分:0)
更改
string searchString = Request.QueryString["ProductName"];
到
string searchString = txtSearch.Text.Trim();
因为您要将searchString
发送至:
GridView1.DataSource = ProductBL.GetProductInfo(searchString);
GridView1.DataBind();