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