摘要:組合查詢功能在信息系統(tǒng)軟件中應(yīng)用較廣,在運(yùn)行中使用者可以根據(jù)自己的查詢需要從下拉列表框中選擇要查詢的項目,將多個條件通過關(guān)系運(yùn)算符進(jìn)行連接,從而實(shí)現(xiàn)多個條件的組合查詢。查詢條件可任意組合,查詢結(jié)果顯示在GridView控件中。該文結(jié)合自己的開發(fā)體會,介紹組合查詢功能在系統(tǒng)中的實(shí)現(xiàn)方法。
關(guān)鍵詞:ASP.NET;組合查詢;代碼實(shí)現(xiàn)
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)20-0007-03
一個完善的應(yīng)用系統(tǒng)程序中,查詢功能是其重要的組成部分,靈活的查詢方法、不同的查詢需求是使用者對系統(tǒng)提出的更高的要求,如果只能滿足固定條件和固定內(nèi)容的查詢,會限制系統(tǒng)使用的靈活性。如果能讓使用者自己選擇查詢條件,篩選查看的項目,就能夠完善我們的查詢功能。
在設(shè)計畢業(yè)生就業(yè)管理信息系統(tǒng)的過程中,我們就開發(fā)了通用的查詢功能模塊,為了滿足對畢業(yè)生不同信息的查詢需要,在系統(tǒng)中我們定義了不同查詢條件的選擇方式,而且還可以靈活地使用多個條件的組合查詢,支持查詢內(nèi)容的模糊查詢,可以實(shí)時地查看所形成的查詢語句,最后將查詢結(jié)果用數(shù)據(jù)表的形式輸出顯示。
雖然系統(tǒng)是基于asp.net技術(shù)開發(fā)的,但基本的方法和設(shè)計思路對使用其他語言開發(fā)仍然具有一定的指導(dǎo)作用。
下面以系統(tǒng)中的畢業(yè)生信息查詢?yōu)槔齺斫榻B實(shí)現(xiàn)的方法和設(shè)計思路。
1 頁面的設(shè)計
系統(tǒng)采用的是Web頁面的實(shí)現(xiàn)方式,在頁面中添加了實(shí)現(xiàn)選擇"查詢字段"和"算術(shù)運(yùn)算符"的下拉列表框控件,然后再添加一個單行文本框用來輸入查詢要比較的參考值,這樣就可以實(shí)現(xiàn)一個查詢條件的定義。再添加一個選擇下拉列表框,用于實(shí)現(xiàn)組合條件邏輯運(yùn)算的選擇,其中包含邏輯與運(yùn)算和邏輯或運(yùn)算的選擇。
最后再添加三個命令按鈕,分別實(shí)現(xiàn):執(zhí)行最終結(jié)果的查詢、重新選擇新的查詢條件、結(jié)束查詢。
為了便于查看實(shí)現(xiàn)的SELECT查詢命令,我們可以添加一個多行文本框,將選擇過程中的命令顯示在多行文本框中。
在下方添加一個GridView控件,用來顯示組合查詢的結(jié)果。
其中包含的控件類型及ID依次為:
包含查詢字段的下拉列表框(field_name)、包含關(guān)系運(yùn)算符的下拉列表框(operate)、輸入查詢值的文本框(query_value)、選擇邏輯運(yùn)算符的下拉列表框(logic_operate)、執(zhí)行查詢命令按鈕控件(search)、重新選擇命令按鈕控件(again)、結(jié)束命令按鈕控件(btn_ret)、選擇命令結(jié)果顯示文本框(command_display)、查選結(jié)果顯示在數(shù)據(jù)控件(result)。
2 執(zhí)行查詢過程
1)查詢下拉列表框中綁定的是可以使用查詢的全部字段,可以從中選擇要查詢的項目名稱;
2)從關(guān)系下拉列表框選擇要執(zhí)行的操作運(yùn)算符,其中包含模糊查詢的運(yùn)算符;
3)在輸入查詢值的文本框中輸入要查詢的值,回車確認(rèn),此時形成的SELECT命令就會顯示在命令結(jié)果顯示文本框中;
4)如果繼續(xù)選擇其他條件,單擊選擇邏輯運(yùn)算符的下拉列表框,從中選擇邏輯與或者邏輯或運(yùn)算;如果不再選擇其他查詢條件,可以直接點(diǎn)擊執(zhí)行查詢命令按鈕;
5)若繼續(xù)選擇,則重復(fù)前面的操作;若選擇執(zhí)行查詢,則查詢結(jié)果會顯示在GridView控件中。
3 設(shè)計過程說明
3.1 綁定要查詢的字段名
將需要查詢數(shù)據(jù)表:student_employee的字段名綁定到查詢字段的下拉列表框控件(field_name)上 ,為了便于用戶理解字段名稱的含義,可以先建立一個數(shù)據(jù)字典的表,包含查詢數(shù)據(jù)表中的字段名和對應(yīng)的中文解釋。在沒有選擇要查詢的字段之前,關(guān)系運(yùn)算符的下拉列表框、輸入查詢值的文本框、邏輯運(yùn)算符的下拉列表框、執(zhí)行查詢命令按鈕的狀態(tài)都是不可使用的,可以將它們的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 選擇查詢的字段名
對于形成的查詢命令結(jié)果可以使用一個變量保存,在查詢開始之前,對該變量進(jìn)行基本的初始化賦值,形成查詢命令的基本框架:
static string select_command = "select * from student_employee_info where (";
把從字段列表框中選擇查詢的字段名添加到命令變量中(要先將下拉列表框的AutoPostBack屬性設(shè)成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 選擇運(yùn)算符
選擇字段名后,關(guān)系運(yùn)算符列表框就可以選擇操作了,從中選中某個運(yùn)算符之后,就可以在文本框中輸入要查詢的數(shù)據(jù)值了:
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 輸入要查詢的值
在文本框中輸入要查詢的字段值,直接回車,邏輯運(yùn)算選擇框控件可用:
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 選擇邏輯運(yùn)算符
以上操作過程完成了一個查詢條件的定義,如果還需要添加其他條件,可以從邏輯運(yùn)算符中選擇“與”或者“或”運(yùn)算,然后重復(fù)執(zhí)行2,繼續(xù)添加其他的條件;如果不希望添加其他條件則直接按“執(zhí)行查詢”命令按鈕,運(yùn)行查詢命令。
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 執(zhí)行查詢
單擊“執(zhí)行查詢”命令按鈕開始查詢,并將查詢結(jié)果綁定到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 重新選擇
單擊“重新選擇”命令按鈕,清除前面的選擇結(jié)果。
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 建議
該文只是針對一個數(shù)據(jù)表的查詢進(jìn)行了介紹,如果系統(tǒng)希望實(shí)現(xiàn)對多個數(shù)據(jù)表查詢,可以創(chuàng)建一個查詢數(shù)據(jù)表,其中字段table_name包含可以查詢使用的表名,將需要的表明添加在此數(shù)據(jù)表中,可以先讓用戶選擇需要查詢的數(shù)據(jù)表名。然后再創(chuàng)建一個數(shù)據(jù)字典表,包含:table_name、field_name、field_explain字段,分別對應(yīng)數(shù)據(jù)表名、字段標(biāo)識、中文含義,當(dāng)用戶選擇要查詢的數(shù)據(jù)表之后,可以從中選擇該表的可以供查詢的字段綁定在字段選擇下拉列表框中,這樣就可以實(shí)現(xiàn)不同數(shù)據(jù)表的組合查詢了。
參考文獻(xiàn):
[1] 邵雨舟. 畢業(yè)生就業(yè)跟蹤系統(tǒng)中郵件群發(fā)功能的實(shí)現(xiàn)[J]. 電腦與電信, 2015(7).