ASP.NET中单字段精确查询的实现

来源:互联网 发布:淘宝联盟软件是真的吗 编辑:程序博客网 时间:2024/06/10 15:01

单字段精确查询的实现

在开发网站过程中经常遇到单字段精确查询。单字段精确查询是指根据浏览者输入或选择的条件进行精确查询,经常应用在对于查询结果要求比较精确的页面。在设计单字段精确查询时,一般通过文本框、下拉列表框或单选按钮组获取查询条件。无论查询条件是由文本框提供,下拉列表框提供,还是由单选按钮组提供,其实现的方法都是类似的。下面将以单文本框精确查询为例介绍单字段精确查询的实现。

1.方案分析

单字段精确查询就是指在一个查询中,只有一个用于输入查询条件的文本框。浏览者只能查找与输入的查询关键字完全匹配的数据。单文本框精确查询经常应用于查询某一固定信息的情况下。例如查询手机号码、车牌号码归属地或根据会员名称查询会员的订单信息等。

在实现单文本框精确查询时,首先需要确定检索词并设置查询条件,然后编写检索式,最后输出查询结果。为了使读者更好的理解单文本框精确查询,下面给出单文本框精确查询的流程图,如图所示。

图  单文本框精确查询的示意图

2.实施过程

在开发酒店管理系统时,在房间信息维护模块中,有查询房间的功能。由于房间的号码是惟一的,所以这里的查询功能就用到了单字段的精确查询。根据输入的房间号码,用户可以很快的检索出对应的信息,如图所示。

图  根据查询条件查询的结果

程序实现具体步骤:

(1)新建一个网站命名为01,默认主页为Default.aspx。

(2)在Default.aspx页中添加两个TextBox控件,分别用于输入登录的用户名和密码,然后再添加一个Button控件用于登录。

(3)新建一个名为RoomManage.aspx的页,在页面中添加一个TextBox控件,用于输入查询的关键字,添加一个Button控件用于提交查询关键字,添加一个GridView控件用于显示数据。

(4)新建一个名为RoomModify.aspx的页,在页面上添加两个TextBox控件,分别用于显示房间位置和房间描述,再添加一个DropDownList控件用于显示房间类型。

(5)程序主要代码如下。

首先在Web.config文件中进行数据库连接配置,具体代码如下。

     <appSettings>

     <add key="dsn" value="server=.;database=db_04;uid=sa;pwd="/>

     </appSettings>

在Default.aspx页中实现了用户的登录,通过输入的用户名和密码进行查询,如果数据库中存在此用户名和密码,就会允许进入系统,否则将会提示重新登录,具体代码如下。

        protected void ImageButton2_Click(object sender, ImageClickEventArgs e)

        {

            //从文件Web.config中读取连接字符串

            string strconn = ConfigurationSettings.AppSettings["dsn"];

            //连接本地计算机的HMS数据库

            SqlConnection cn = new SqlConnection(strconn);

            cn.Open();

            //构造SQL语句,该语句在Users表中检查用户名和密码是否正确

            string mysql = "select * from Users where Uid='" + tbx_uid.Text + "'and UPassword='" + tbx_upassword.Text + "'";

            //创建Command对象

            SqlCommand cm = new SqlCommand(mysql, cn);

            //执行ExecuteReader ()方法

            SqlDataReader dr = cm.ExecuteReader();

            if (dr.Read())

            {

                lbl_message.Text = "";

                //保存当前用户名及用户权限

                Session["uid"] = dr["uid"].ToString();

                Session["upower"] = dr["upower"].ToString();

                lbl_message.Text = "欢迎您!" + Session["uid"];

                if (Session["upower"].ToString() == "1")

                { //进入酒店总管界面

                    Response.Redirect("roommanage.aspx");

                }

                else if (Session["upower"].ToString() == "2")

                { //进入酒店前台界面

                    Response.Redirect("roomlist.aspx");

                }

            }

            else

            {

                lbl_message.Text = "对不起,您的用户名/密码不正确,请重新输入";

            }

            //关闭连接

            cn.Close();

        }

在RoomManage.aspx页中,当页面加载的时候会调用自定义的BindGrid方法显示所有的房间信息,具体代码如下。

       protected void Page_Load(object sender, System.EventArgs e)

       {

            if (Session["uid"]!="")

            {

                if (!IsPostBack) BindGrid();

            }

            else

            {

                Page.RegisterStartupScript("", "<script>alert('请登录')</script>");

            }

       }

         //自定义一个BindGrid方法用于显示所有的房间信息

       public void BindGrid()

       {      //从文件Web.config中读取连接字符串

              string strconn= ConfigurationSettings.AppSettings["dsn"];

              //连接本地计算机的HMS数据库

              SqlConnection cn= new SqlConnection (strconn);

              //创建SqlDataAdapter对象,调用存储过程

              SqlDataAdapter da=new SqlDataAdapter ("guestroomlist",cn);

              //创建并填充DataSet

              DataSet ds=new DataSet ();

              da.Fill (ds);

            GridView1.DataSource = ds;

            GridView1.DataKeyNames = new string[] { "RID"};

            GridView1.DataBind();

         cn.Close ();

       }

在ID属性为tbx_rid的文本框中输入要查询的关键字,然后单击“开始”按钮进行查询。程序将文本框中输入的值赋值给varrid,然后再通过Response.Redirect ("roommodify.aspx?rid="+varrid)将文本框的值传递给查询结果显示页面roommodify.aspx,代码如下。

       protected void btn_search_Click(object sender, System.EventArgs e)

       {

              int varrid=0;

              try

              {

                 varrid=Convert.ToInt32 (tbx_rid.Text .ToString ());

              }

              catch

              {

                 Response.Write("输入房号有误,请返回!");

                 Response.End();

              }

              Response.Redirect ("roommodify.aspx?rid="+varrid);

       }

如果数据很多需要分页,会通过下面的代码对分页进行数据绑定。

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

        {

            GridView1.PageIndex = e.NewPageIndex;

            BindGrid();

        }

单击“删除”按钮,程序会根据每条信息的编号进行删除,具体代码如下。

        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

        {

            //对GuestRoom表进行删除

            //从文件Web.config中读取连接字符串

            string strconn = ConfigurationSettings.AppSettings["dsn"];

            //连接本地计算机的HMS数据库

            SqlConnection cn = new SqlConnection(strconn);

            cn.Open();

            SqlCommand cm = new SqlCommand("guestroomdelete", cn);

            cm.CommandType = CommandType.StoredProcedure;

            cm.Parameters.Add("@RID", SqlDbType.VarChar);

            //从GridView中取得更新内容

            cm.Parameters["@RID"].Value = GridView1.DataKeys[e.RowIndex].Value;

            cm.ExecuteNonQuery();

            cn.Close();

            GridView1.EditIndex = -1;

            BindGrid();

        }

在roommodify.aspx中, 通过接收传递过来的值在数据库中进行查询,之后将查询的结果依次绑定到不同的控件上显示出来,代码如下。

       protected void Page_Load(object sender, System.EventArgs e)

         {

              if(!IsPostBack)

              {  //绑定房间类型信息下拉列表框

                 string strconn= ConfigurationSettings.AppSettings["dsn"];

                 //连接本地计算机的数据库

                 SqlConnection cn0= new SqlConnection (strconn);

                 cn0.Open ();

                 string mysql="select * from RoomType ";

                 SqlCommand cm0=new SqlCommand  (mysql,cn0);

                 SqlDataReader dr0=cm0.ExecuteReader ();

                 while(dr0.Read ())

                 {

                     ddl_rtype.Items .Add (new ListItem(dr0["tname"].ToString(),dr0["tid"].ToString()) );

                 }

                 cn0.Close ();

                 //绑定各TextBox数据

                 //连接本地计算机的数据库

                 SqlConnection cn= new SqlConnection (strconn);

                 cn.Open ();

                string key = Request.QueryString["rid"].ToString();

                string sqlstr = "Select TID,Tname,Tprice,RID,Rtype,Rposition,Rdescribe from RoomType,GuestRoom where GuestRoom.RType=RoomType.TID AND GuestRoom.RID="+key;

                 SqlCommand cm=new SqlCommand  (sqlstr,cn);

                 SqlDataReader dr=cm.ExecuteReader ();

                 if(dr.Read ())//存在对应项

                 {

                     lbl_rid.Text =dr["rid"].ToString ();

                     tbx_rposition.Text =dr["rposition"].ToString ();

                     tbx_rdescribe.Text =dr["rdescribe"].ToString ();

               ddl_rtype.Items.FindByValue(dr["rtype"].ToString ()).Selected =true;

                 }

                 else

                 {

                     Response.Write ("对不起,没有该房间信息");

                     Response.End ();

                 }

             }

         }

                                                                                ——摘自《C#编程词典》