【知识要点】
(1)学习多条件检索
【问题提出】
有时候我们记得客户名称的一部分,有时候我们只记得联系人,多条件检索在实际开发过程中更为常见。
【在线指导】
通过上一章的学习,我们知道单条件检索是十分简单的,那么多条件检索虽说不上太难,但是并不简单,我们一起来学习一下多条件检索。
我们看一下可能存在的情况(客户名称和联系人只相当于两个条件):
(1)如果“客户名称”和“联系人”都不填,我们默认为查询所有客户信息,则相当于执行查询:SELECT * FROM Client;(注:如果是网站则应该什么也查不到,如果是软件,则常常可以查看所有信息)
(2)如果“客户名称”为“郑州”和“联系人”为“吴”都填写,则相当于两个条件要同时符合,则相当于执行查询:SELECT * FROM Client WHERE vClientName LIKE '%郑州%' AND vContacter LIKE '%吴%';
(3)如果“客户名称”为“郑州”,而“联系人”不填写,则相当于只查询客户名称包含”郑州”的客户,即可则相当于执行查询:SELECT * FROM Client WHERE vClientName LIKE '%郑州%';
(4)如果“客户名称”不填,而“联系人”为“吴”,则相当于只查询联系人包含“吴”的客户,则相当于执行查询:SELECT * FROM Client WHERE vContacter LIKE '%吴%'。
……
你可想而知,如果是三个条件呢?四个条件呢?你要写多少种情况呢?
我们没有采取以上写法,而是巧妙的使用了……
1、设计界面
(1)打开Hello项目,单击“启动页>最近使用的项目>Hello”。
(2)在“解决方案资源管理器”中添加“SqlSearchMulti.aspx”页面。
(3)从工具箱中拖1个GridView到SqlSearchMulti.aspx页面。
(GridView控件ID属性分别为:gvClient)
(单击“>”箭头按钮。)
(单击“自动套用格式”)
(选择:沙滩和天空样式)
(单击“编辑列”)
(单击“编辑列”)
依次添加多个BoundField列,HeaderText为表头显示文字,DataField为数据库Client表的列名,最后把“自动生成字段”前的复选框去掉。
2、添加代码
(1)双击页面上的“空白”部分。
我们在Page_Load()中间输入:
//连接SQL SERVER
string ConnSqlServer = "Server=www.genwoxue.com;Database=SuperMarket;User ID=sa;Pwd=sigmasoft";
SqlConnection Conn = new SqlConnection(ConnSqlServer);
//打开
Conn.Open();
//获取客户名称和联系人名称
string ClientName = tbClientName.Text.Trim();
string Contacter = tbContacter.Text.Trim();
//声明查询语句变量
string ClientNameSql="";
string ContacterSql="";
string ClientSql = "";
//如果客户名称不为空,生成ClientNameSql语句
if (ClientName != "")
ClientNameSql = " AND vClientName LIKE '%" + ClientName + "%'";
//如果联系人不为空,生成ContacterSql语句
if (Contacter != "")
ContacterSql = " AND vContacter LIKE '%" + Contacter + "%'";
//综合查询语句
ClientSql = "SELECT * FROM Client WHERE cClientCode<>'' " + ClientNameSql + ContacterSql;
//填充DataSet
SqlDataAdapter Adapter = new SqlDataAdapter(ClientSql, Conn);
DataSet Ds = new DataSet();
Adapter.Fill(Ds, "Client");
//执行命令
gvClient.DataSource = Ds.Tables["Client"];
gvClient.DataBind();
//关闭数据库
Conn.Close();
讲解:
注意体会本种写法的妙处,即使10个条件也不会增加多少个SQL语句。
(2)从“解决方案资源管理器”中,选择“SqlSearchMulti.aspx”,单击右键“在浏览器中查看”。
在客户名称处输入:郑州
当然我们也可以尝试在联系人处输入:吴