应用系统中通用组合查询功能的实现方法
2018-11-15邵雨舟
摘要:组合查询功能在信息系统软件中应用较广,在运行中使用者可以根据自己的查询需要从下拉列表框中选择要查询的项目,将多个条件通过关系运算符进行连接,从而实现多个条件的组合查询。查询条件可任意组合,查询结果显示在GridView控件中。该文结合自己的开发体会,介绍组合查询功能在系统中的实现方法。
关键词:ASP.NET;组合查询;代码实现
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)20-0007-03
一个完善的应用系统程序中,查询功能是其重要的组成部分,灵活的查询方法、不同的查询需求是使用者对系统提出的更高的要求,如果只能满足固定条件和固定内容的查询,会限制系统使用的灵活性。如果能让使用者自己选择查询条件,筛选查看的项目,就能够完善我们的查询功能。
在设计毕业生就业管理信息系统的过程中,我们就开发了通用的查询功能模块,为了满足对毕业生不同信息的查询需要,在系统中我们定义了不同查询条件的选择方式,而且还可以灵活地使用多个条件的组合查询,支持查询内容的模糊查询,可以实时地查看所形成的查询语句,最后将查询结果用数据表的形式输出显示。
虽然系统是基于asp.net技术开发的,但基本的方法和设计思路对使用其他语言开发仍然具有一定的指导作用。
下面以系统中的毕业生信息查询为例来介绍实现的方法和设计思路。
1 页面的设计
系统采用的是Web页面的实现方式,在页面中添加了实现选择"查询字段"和"算术运算符"的下拉列表框控件,然后再添加一个单行文本框用来输入查询要比较的参考值,这样就可以实现一个查询条件的定义。再添加一个选择下拉列表框,用于实现组合条件逻辑运算的选择,其中包含逻辑与运算和逻辑或运算的选择。
最后再添加三个命令按钮,分别实现:执行最终结果的查询、重新选择新的查询条件、结束查询。
为了便于查看实现的SELECT查询命令,我们可以添加一个多行文本框,将选择过程中的命令显示在多行文本框中。
在下方添加一个GridView控件,用来显示组合查询的结果。
其中包含的控件类型及ID依次为:
包含查询字段的下拉列表框(field_name)、包含关系运算符的下拉列表框(operate)、输入查询值的文本框(query_value)、选择逻辑运算符的下拉列表框(logic_operate)、执行查询命令按钮控件(search)、重新选择命令按钮控件(again)、结束命令按钮控件(btn_ret)、选择命令结果显示文本框(command_display)、查选结果显示在数据控件(result)。
2 执行查询过程
1)查询下拉列表框中绑定的是可以使用查询的全部字段,可以从中选择要查询的项目名称;
2)从关系下拉列表框选择要执行的操作运算符,其中包含模糊查询的运算符;
3)在输入查询值的文本框中输入要查询的值,回车确认,此时形成的SELECT命令就会显示在命令结果显示文本框中;
4)如果继续选择其他条件,单击选择逻辑运算符的下拉列表框,从中选择逻辑与或者逻辑或运算;如果不再选择其他查询条件,可以直接点击执行查询命令按钮;
5)若继续选择,则重复前面的操作;若选择执行查询,则查询结果会显示在GridView控件中。
3 设计过程说明
3.1 绑定要查询的字段名
将需要查询数据表:student_employee的字段名绑定到查询字段的下拉列表框控件(field_name)上 ,为了便于用户理解字段名称的含义,可以先建立一个数据字典的表,包含查询数据表中的字段名和对应的中文解释。在没有选择要查询的字段之前,关系运算符的下拉列表框、输入查询值的文本框、逻辑运算符的下拉列表框、执行查询命令按钮的状态都是不可使用的,可以将它们的Enabled属性都为假值。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{ SqlConnection cn = new SqlConnection(“server=.;database=employee;uid=sa;pwd=”);
cn.Open();
DataTable dt = new DataTable();
string sql = "SELECT Name FROM SysColumns WHERE id=Object_Id('student_employee')";
SqlDataAdapter da = new SqlDataAdapter(sql, cn);
da.Fill(dt);
field_name.DataValueField = "Name";
field_name.DataTextField = "Name";
field_name.DataSource = dt;
field_name.DataBind();
field_name.Items.Add("選择字段...");
field_name.SelectedIndex = field_name.Items.Count - 1;
field_name.Enabled = true;
operate.Enabled = false;
query_value.Enabled = false;
logic_operate.Enabled = false;
search.Enabled = false;
command_display.Text = select_command;
}
}
3.2 选择查询的字段名
对于形成的查询命令结果可以使用一个变量保存,在查询开始之前,对该变量进行基本的初始化赋值,形成查询命令的基本框架:
static string select_command = "select * from student_employee_info where (";
把从字段列表框中选择查询的字段名添加到命令变量中(要先将下拉列表框的AutoPostBack属性设成True):
protected void field_name_SelectedIndexChanged(object sender, EventArgs e)
{
select_command = select_command + field_name.SelectedValue + " ";
field_name.Enabled = false;
operate.Enabled = true;
operate.Focus();
operate.SelectedIndex = operate.Items.Count - 1;
command_display.Text = select_command;
}
3.3 选择运算符
选择字段名后,关系运算符列表框就可以选择操作了,从中选中某个运算符之后,就可以在文本框中输入要查询的数据值了:
protected void operate_SelectedIndexChanged(object sender, EventArgs e)
{
string str;
field_name.Enabled = false;
operate.Enabled = false;
query_value.Enabled = true;
query_value.Focus();
query_value.Text="";
str = operate.SelectedValue;
switch (str)
{
case "=":
{
select_command = select_command + operate.SelectedValue + "'";
break;
}
case "!=":
{
select_command = select_command + operate.SelectedValue + "'";
break;
}
default:
{
select_command = select_command + " like '%";
break;
}
}
command_display.Text = select_command;
}
3.4 输入要查询的值
在文本框中输入要查询的字段值,直接回车,逻辑运算选择框控件可用:
protected void query_value_TextChanged(object sender, EventArgs e)
{ logic_operate.SelectedIndex = logic_operate.Items.Count - 1;
field_name.Enabled = false;
operate.Enabled = false;
query_value.Enabled = false;
logic_operate.Enabled = true;
search.Enabled = true;
if(operate.SelectedValue=="like")
select_command = select_command +query_value.Text+ "%') ";
else
select_command = select_command + query_value.Text + "') ";
command_display.Text = select_command;
logic_operate.Focus();
}
3.5 選择逻辑运算符
以上操作过程完成了一个查询条件的定义,如果还需要添加其他条件,可以从逻辑运算符中选择“与”或者“或”运算,然后重复执行2,继续添加其他的条件;如果不希望添加其他条件则直接按“执行查询”命令按钮,运行查询命令。
protected void logic_operate_SelectedIndexChanged(object sender, EventArgs e)
{
search.Enabled = false;
logic_operate.Enabled = false;
field_name.Enabled = true;
field_name.Focus();
select_command = select_command + logic_operate.SelectedValue + " (";
command_display.Text = select_command;
}
3.6 执行查询
单击“执行查询”命令按钮开始查询,并将查询结果绑定到GridView控件(ID:result)上。
protected void search_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection(“server=.;database=employee;uid=sa;pwd=”);
cn.Open();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(select_command, cn);
da.Fill(dt);
result.DataSource = dt;
result.DataBind();
send.Visible = true;
}
3.7 重新选择
单击“重新选择”命令按钮,清除前面的选择结果。
protected void again_Click(object sender, EventArgs e)
{
field_name.SelectedIndex = field_name.Items.Count - 1;
logic_operate.SelectedIndex = logic_operate.Items.Count - 1;
operate.SelectedIndex = operate.Items.Count - 1;
field_name.Enabled = true;
operate.Enabled = false;
query_value.Enabled = false;
logic_operate.Enabled = false;
search.Enabled = false;
query_value.Text = "";
select_command = "select * from student_employee_info where (";
command_display.Text = select_command;
result.DataSource = null;
result.DataBind();
}
4 建議
该文只是针对一个数据表的查询进行了介绍,如果系统希望实现对多个数据表查询,可以创建一个查询数据表,其中字段table_name包含可以查询使用的表名,将需要的表明添加在此数据表中,可以先让用户选择需要查询的数据表名。然后再创建一个数据字典表,包含:table_name、field_name、field_explain字段,分别对应数据表名、字段标识、中文含义,当用户选择要查询的数据表之后,可以从中选择该表的可以供查询的字段绑定在字段选择下拉列表框中,这样就可以实现不同数据表的组合查询了。
参考文献:
[1] 邵雨舟. 毕业生就业跟踪系统中邮件群发功能的实现[J]. 电脑与电信, 2015(7).