李志剛
【摘要】ASP.NET程序設(shè)計(jì)的教學(xué)過(guò)程中學(xué)生存在前導(dǎo)課程沒(méi)有學(xué)好,不會(huì)頁(yè)面?zhèn)髦担侄卧O(shè)置不合理等問(wèn)題。筆者針對(duì)這些問(wèn)題給出了建議。
【關(guān)鍵詞】頁(yè)面?zhèn)髦? Command? DataSet
一、問(wèn)題
隨著時(shí)代的發(fā)展,軟件技術(shù)專業(yè)發(fā)展越來(lái)越快,ASP.NET程序設(shè)計(jì)是軟件技術(shù)的一門核心的專業(yè)課,但在教學(xué)過(guò)程中學(xué)生存在較大的問(wèn)題,主要問(wèn)題如下:
(1)ASP.NET程序設(shè)計(jì)的前導(dǎo)過(guò)程是C#程序設(shè)計(jì)和數(shù)據(jù)庫(kù),很多學(xué)生基本的SQL都不會(huì)寫,C#中類,對(duì)象,多態(tài),封裝等概念理解不清晰。
(2)對(duì)單選按鈕的使用掌握不太好,如設(shè)計(jì)一個(gè)性別的兩個(gè)單選框,發(fā)現(xiàn)男和女都可以選擇。
(3)對(duì)下拉框的級(jí)聯(lián)不知道如何實(shí)現(xiàn),如學(xué)院,專業(yè),班級(jí)之間的級(jí)聯(lián)。
(4)對(duì)如何進(jìn)行頁(yè)面?zhèn)髦嫡莆詹惶?,基本上遇到?yè)面?zhèn)髦稻陀肧ession,對(duì)Session的不足也不太清楚,只知道Cookie有安全問(wèn)題。
(5)對(duì)六種數(shù)據(jù)驗(yàn)證控件的應(yīng)用掌握不好,不知道驗(yàn)證控件如何選擇,如要求用戶名是6-16位的字母數(shù)字結(jié)合,郵箱不知道用什么驗(yàn)證控件。
(6)Command對(duì)象有ExecuteScaler(),ExecuteReader(),ExecuteNonQuery()不知道如何去選擇和使用。
(7)Command對(duì)象和DataSet對(duì)象都可以進(jìn)行數(shù)據(jù)的增加刪除修改,不知道該如何選擇。
(8)界面設(shè)計(jì)不好看。
針對(duì)以上問(wèn)題,我認(rèn)為應(yīng)采取以下措施:
(1)復(fù)習(xí)數(shù)據(jù)庫(kù)和C#的基礎(chǔ)知識(shí),掌握基本的SQL語(yǔ)句的書寫,包括增加刪除修改查詢特別是多條件查詢和模糊查詢;理解類和對(duì)象的關(guān)系,知道如何去創(chuàng)建一個(gè)對(duì)象,如何調(diào)用對(duì)象的屬性和方法。
(2)對(duì)于多個(gè)單選按鈕,一定要設(shè)置groupname的值,如頁(yè)面只有性別的兩個(gè)單選按鈕,可以把這兩個(gè)單選按鈕的groupname的值設(shè)置成一樣的。如果頁(yè)面有多組單選按鈕,如性別和最喜歡的顏色,需要把兩組單選按鈕的groupname設(shè)計(jì)成不同的值。
(3)實(shí)現(xiàn)下拉框的級(jí)聯(lián)首先要設(shè)計(jì)數(shù)據(jù)表,如要實(shí)現(xiàn)學(xué)院專業(yè)班級(jí)的級(jí)聯(lián),需要設(shè)計(jì)學(xué)院代碼表,專業(yè)代碼表和班級(jí)代碼表,其中學(xué)院代碼表中包括學(xué)院id,學(xué)院名稱;專業(yè)代碼表包括專業(yè)id,專業(yè)名稱和所屬學(xué)院id;班級(jí)代碼表包括班級(jí)id,班級(jí)名稱和所屬專業(yè)id。用學(xué)院代碼表填充學(xué)院下拉框,第二個(gè)下拉框根 據(jù)第一個(gè)下拉框的學(xué)院id的值在專業(yè)代碼表中查找相關(guān)專業(yè)第二個(gè)下拉框根據(jù)第二個(gè)下拉框的專業(yè)id在班級(jí)代碼表中查找相關(guān)班級(jí)。
(4)頁(yè)面?zhèn)髦涤形宸N:QueryString,Session,Cookie,Application,Server.Transfer。其中QueryString是最簡(jiǎn)單的頁(yè)面?zhèn)髦担m合傳一些不重要的簡(jiǎn)單的值,如編號(hào),它會(huì)把傳的值放在ie地址欄上,有一定的安全隱患難。Server.Transfer用法和QueryString使用方法類似,但ie地址欄還人顯示原來(lái)頁(yè)面的地址,對(duì)用戶不太方便。Session是使用最多的頁(yè)面?zhèn)髦?,但過(guò)多的使用Session會(huì)消耗較多的服務(wù)器資源。Application是全局變量,在使用前要加鎖,使用完后要解鎖,一般用于統(tǒng)計(jì)網(wǎng)站的訪問(wèn)人數(shù)。Cookie是儲(chǔ)存在客戶端的,如常用的記住帳號(hào)密碼就是用的Cookie。
(5)驗(yàn)證控件有六種:非空驗(yàn)證,范圍驗(yàn)證,比較驗(yàn)證,正則表達(dá)式驗(yàn)證,用戶自定義驗(yàn)證和驗(yàn)證匯總。非空驗(yàn)證是驗(yàn)證必填項(xiàng),如用戶名,密碼;范圍驗(yàn)證是驗(yàn)證數(shù)據(jù)是否在一定的范圍內(nèi),如年齡應(yīng)該在0-100歲之間;比較驗(yàn)證一般用于密碼和確認(rèn)密碼的驗(yàn)證;正則表達(dá)式驗(yàn)證應(yīng)用較廣,如郵箱、手機(jī)號(hào)、ip地址、用戶名,如用戶名要求以字母或下劃線開(kāi)頭,后面緊跟著字母、數(shù)學(xué),長(zhǎng)度為6-16位;用戶自定義驗(yàn)證一般用于自己設(shè)定的規(guī)則,包括用戶名不能重復(fù),要輸入一奇數(shù)。驗(yàn)證匯總是把所有的驗(yàn)證結(jié)果匯總在一起顯示,包括摘要形式和彈出對(duì)話框的形式。
(6)command對(duì)象有ExecuteScaler(),ExecuteReader(),ExecuteNonQuery()三個(gè)方法。ExecuteScaler()是返回首行首行,適合于和sql語(yǔ)句中的聚和函數(shù)一起使用,如查詢用戶密碼是否存在,可以用count(*)來(lái)實(shí)現(xiàn);找同最高單價(jià)可以用max(price)來(lái)實(shí)現(xiàn)。ExecuteReader()返回的是只讀對(duì)象,可以進(jìn)行查詢數(shù)據(jù)是否存在和讀取數(shù)據(jù)庫(kù)中的數(shù)據(jù),如根據(jù)用戶名和密碼查詢角色字段。ExecuteScaler()是返回影響的行數(shù),對(duì)于查詢來(lái)說(shuō),不管是否查詢到數(shù)據(jù),ExecuteScaler()返回值都是-1,它適合于增刪改。所以,如果只需要查詢數(shù)據(jù)是否存在,用ExecuteScaler()比較方便,如果要取數(shù)據(jù)庫(kù)中的數(shù)據(jù),需要用ExecuteReader(),如果是增加刪除修改那么需要用ExecuteNonQuery()。
(7)DataSet和DataAdapter也可以進(jìn)行數(shù)據(jù)的增加刪除修改刪除,它在對(duì)數(shù)據(jù)進(jìn)行操作時(shí)不需要去打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)連接,但用它來(lái)進(jìn)行數(shù)據(jù)的增加,需要先新建一個(gè)數(shù)據(jù)行,然后再給每一列數(shù)據(jù)進(jìn)行賦值;它進(jìn)行數(shù)據(jù)更新時(shí),首先要取到需要更新的那一行,然后再對(duì)每個(gè)字段進(jìn)行修改;它進(jìn)行數(shù)據(jù)刪除的時(shí)候,首先取到要?jiǎng)h除的那一行,直接刪除數(shù)據(jù)行就行;因?yàn)橛盟M(jìn)行數(shù)據(jù)增刪改的時(shí)候,代碼量會(huì)比較大,所以DataSet一般用于查詢數(shù)據(jù)是否存在,讀取數(shù)據(jù)和顯示數(shù)據(jù)。
(8)對(duì)于界面不好看的問(wèn)題,需要復(fù)習(xí)以前學(xué)過(guò)的HTML,CSS和JS,還可以參考現(xiàn)有的網(wǎng)站,看它們有哪些可取之處。