开发搜索网站时,常常需要根据多个条件搜索一个指定结果。本实例在一个含有大量数据信息的搜索网站中实现了高级搜索功能。高级搜索主要通过复合条件查询来实现。运行本实例,程序将根据用户选择的信息类型和输入的信息名称在网站中进行搜索。另外,用户还可以指定一页中显示多少条记录。
图:
本例主要以asp.net网站为例,讲述如何运用SQL语句中的比较运算符。
为了方便用户使用SQL语句进行各种查询,在SQL语句中提供了几种常用的比较运算符,
图:
(1)新建一个网站,将其命名为HighSearch,默认主页为Default.aspx。
(2)Default.aspx页面用到的控件及用途
图:(3)本实例主要用到了DataList控件分页技术。首先自定义一个dlDataBind()方法,该方法用来从数据库中查找出相关记录并计算出记录总数,然后对DataList控件进行数据绑定。该方法有4个参数:sqlstr、table、dkf和psize,它们分别表示要执行的SQL语句、数据表名、DataList控件要绑定的数据表主键和每页显示的记录数。
代码如下:
- public void dlDataBind(string sqlstr,
string table, string dkf, int psize) - {
- int curpage = Convert.ToInt32(this.labPage.Text);
- PagedDataSource ps = new PagedDataSource();
- sqlconn.Open();
- SqlDataAdapter MyAdapter = new SqlDataAdapter(sqlstr, sqlconn);
- DataSet ds = new DataSet();
- MyAdapter.Fill(ds, table);
- ps.DataSource = ds.Tables[table].DefaultView;
- ps.AllowPaging = true; //是否可以分页
- ps.PageSize = psize; //显示的数量
- ps.CurrentPageIndex = curpage - 1; //取得当前页的页码
- this.lnkbtnUp.Enabled = true;
- this.lnkbtnNext.Enabled = true;
- this.lnkbtnBack.Enabled = true;
- this.lnkbtnOne.Enabled = true;
- if (curpage == 1)
- {
- this.lnkbtnOne.Enabled = false;//不显示第一页按钮
- this.lnkbtnUp.Enabled = false;//不显示上一页按钮
- }
- if (curpage == ps.PageCount)
- {
- this.lnkbtnNext.Enabled = false;//不显示下一页
- this.lnkbtnBack.Enabled = false;//不显示最后一页
- }
- this.labBackPage.Text = Convert.ToString(ps.PageCount);
- this.dlInfo.DataSource = ps;
- this.dlInfo.DataKeyField = dkf;
- this.dlInfo.DataBind();
- sqlconn.Close();
- }
dlDataBind()方法定义完成之后,还需要自定义一个dlInfoBind()方法来执行数据库查询操作,同时实现用户指定每页显示多少条记录的功能。
代码:
- public void dlInfoBind()
- {
- string sqlstr = "select * from tb_Info where
InfoName " + ddlISign.SelectedValue.Trim() - + " '%" + txtSKWord.Text.Trim() + "%' and
InfoType " + ddlSSign.SelectedValue.Trim() - + " '%" + ddlInfoType.SelectedValue.Trim() + "%'";
- if (!sqloperate.comBind(sqlstr))
- {
- Response.Write("<script>alert('没有您要
查询的结果,请重新输入')</script>"); - Panel1.Visible = false;
- }
- else
- {
- if (ddlCount.SelectedValue == "1")
- {
- this.dlDataBind(sqlstr, "tb_Info", "InfoID", 1);
- }
- if (ddlCount.SelectedValue == "2")
- {
- this.dlDataBind(sqlstr, "tb_Info", "InfoID", 2);
- }
- if (ddlCount.SelectedValue == "3")
- {
- this.dlDataBind(sqlstr, "tb_Info", "InfoID", 3);
- }
- if (ddlCount.SelectedValue == "4")
- {
- this.dlDataBind(sqlstr, "tb_Info", "InfoID", 4);
- }
- if (ddlCount.SelectedValue == "5")
- {
- this.dlDataBind(sqlstr, "tb_Info", "InfoID", 5);
- }
- if (ddlCount.SelectedValue == "6")
- {
- this.dlDataBind(sqlstr, "tb_Info", "InfoID", 6);
- }
- if (ddlCount.SelectedValue == "7")
- {
- this.dlDataBind(sqlstr, "tb_Info", "InfoID", 7);
- }
- if (ddlCount.SelectedValue == "8")
- {
- this.dlDataBind(sqlstr, "tb_Info", "InfoID", 8);
- }
- if (ddlCount.SelectedValue == "9")
- {
- this.dlDataBind(sqlstr, "tb_Info", "InfoID", 9);
- }
- if (ddlCount.SelectedValue == "10")
- {
this.dlDataBind(sqlstr, "tb_Info", "InfoID", 10); } } }
当用户单击"搜索"按钮时,程序调用dlInfoBind()方法进行数据信息检索操作。"搜索"按钮的Click事件代码如下:
protected void btnSearch_Click(object sender, EventArgs e) { this.dlInfoBind( ); }
心法领悟025:如何锁定Application对象。
由于Application对象属于网站的全局变量,因此经常会出现多人同时访问和修改对象的情况。为了避免两个会话同时修改Application对象,需要在修改前锁定Application对象,修改后再解锁Application对象。Application对象可以使用Lock()方法实现加锁功能,使用UnLock()方法实现解锁功能,相关代码如下:
Application.Lock();//锁定Application对象 Application.UnLock();//解锁Application对象
end。
adiOS