版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
單元七使用ADO.NET實(shí)現(xiàn)數(shù)據(jù)庫訪問C#語言程序設(shè)計(jì)基礎(chǔ)教程任務(wù)7.1ADO.NET核心對象簡介任務(wù)描述本節(jié)首先回顧有關(guān)數(shù)據(jù)庫的一些基本概念和常用的SQL語句,并且介紹本書開發(fā)的“高校學(xué)生管理系統(tǒng)”(MySchool)系統(tǒng)需要的數(shù)據(jù)庫表結(jié)構(gòu);然后了解ADO.NET的相關(guān)術(shù)語和常用對象。預(yù)備知識要實(shí)現(xiàn)對ADO.NET的靈活操作,首先必須熟練掌握數(shù)據(jù)庫的相關(guān)概念、SQL語言以及存儲過程等數(shù)據(jù)庫基礎(chǔ)知識。數(shù)據(jù)庫是長期存儲在計(jì)算機(jī)內(nèi)的、有組織的、可共享的數(shù)據(jù)集合。數(shù)據(jù)庫不僅具有固定的格式與特征,而且可以以表格的形式來存儲記錄,具有自動化管理、快速查詢及統(tǒng)計(jì)等優(yōu)點(diǎn)。任務(wù)7.1ADO.NET核心對象簡介預(yù)備知識7.1.1關(guān)系型數(shù)據(jù)庫簡介數(shù)據(jù)庫系統(tǒng)主要經(jīng)歷了三個階段:網(wǎng)狀數(shù)據(jù)庫、層次數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫,關(guān)系數(shù)據(jù)模型是當(dāng)前的主導(dǎo)數(shù)據(jù)模型,如Access、SQLServer、Oracle、DB2等。1.關(guān)系數(shù)據(jù)庫定義關(guān)系數(shù)據(jù)庫是一些相關(guān)的表和其他數(shù)據(jù)庫對象的集合,其含義可以解釋為以下三方面:(1)在關(guān)系數(shù)據(jù)庫中,信息被存放在二維表(table)中,一個關(guān)系數(shù)據(jù)庫中可以包含多個數(shù)據(jù)表,每個表又包含行(記錄)和列(字段)。(2)數(shù)據(jù)表之間是相互關(guān)聯(lián)的,通過主鍵和外鍵實(shí)現(xiàn)。(3)數(shù)據(jù)庫中除了包含數(shù)據(jù)表之外,還包含有其他數(shù)據(jù)庫對象,如視圖、存儲過程等。任務(wù)7.1ADO.NET核心對象簡介預(yù)備知識7.1.1關(guān)系型數(shù)據(jù)庫簡介2.主鍵和外鍵主鍵(PrimaryKey,PK)是指數(shù)據(jù)表中的某一列,該列的值能唯一地標(biāo)識一條記錄(一行)。如學(xué)生信息表中的“學(xué)號”可以唯一地標(biāo)識一個學(xué)生,而姓名則不行,因?yàn)榭赡艽嬖诙鄠€學(xué)生叫同一個名字的情況。主鍵的主要功能是實(shí)現(xiàn)數(shù)據(jù)的實(shí)體完整性,即主鍵的取值必須唯一,且不能為空。外鍵(ForeignKey,F(xiàn)K)是指表B中含有與另一個表A的主鍵相對應(yīng)的列組,那么在表B中該列組成為外鍵。外鍵的功能主要是實(shí)現(xiàn)參照完整性。使用外鍵時要保證外鍵和主鍵具有相同的數(shù)據(jù)類型和長度,名字相同。創(chuàng)建外鍵的優(yōu)點(diǎn)有:(1)實(shí)現(xiàn)表之間的關(guān)聯(lián)(2)根據(jù)主鍵列的值來檢查外鍵列的值的合法性。任務(wù)7.1ADO.NET核心對象簡介預(yù)備知識7.1.2常用SQL語句SQL(StructuredQueryLanguage)即“結(jié)構(gòu)化查詢語言”是通用的關(guān)系數(shù)據(jù)庫語言,使用其可以方便的實(shí)現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的查找、新增、更新和刪除。SQL語言對數(shù)據(jù)的操縱分為數(shù)據(jù)庫查詢操作、數(shù)據(jù)插入操作、數(shù)據(jù)更新操作和數(shù)據(jù)刪除操作四種。任務(wù)7.1ADO.NET核心對象簡介預(yù)備知識7.1.2常用SQL語句1.?dāng)?shù)據(jù)查詢操作數(shù)據(jù)查詢主要用于從表中查詢滿足條件的記錄,語法格式為:SELECT[ALL|DISTINCT]字段1,字段2,…FROM表或視圖[WHERE<篩選條件>][GROUPBY<字段名>[HAVING<條件表達(dá)式>]][ORDERBY<字段名>[ASC|DESC]]任務(wù)7.1ADO.NET核心對象簡介預(yù)備知識7.1.2常用SQL語句說明:(1)SELECT語句和FROM語句是必須的,方括號中的語句是可選的;(2)SELECT關(guān)鍵字后面的字段名指明要在查詢后顯示的列,各字段之間用逗號隔開。若要查詢表中的所有字段使用“SELECT*”;(3)[ALL|DISTINCT]中DISTINCT表示不會顯示查詢結(jié)果中的重復(fù)行,ALL則顯示重復(fù)行;(4)GROUPBY短語用來將結(jié)果按指定的字段分組,如果帶HAVING表達(dá)式,則只有滿足表達(dá)式條件的才能輸出;(5)ORDERBY短語用來按指定字段排序,ASC為升序,DESC為降序。任務(wù)7.1ADO.NET核心對象簡介預(yù)備知識7.1.2常用SQL語句2.?dāng)?shù)據(jù)插入操作數(shù)據(jù)插入操作主要用于向表中添加數(shù)據(jù)。語法格式為:INSERTINTO<表名>[(<字段1>[,<字段2>,…])]VALUES(<表達(dá)式1>[,<表達(dá)式2>,…])說明:(1)當(dāng)向一條記錄的所有字段添加數(shù)據(jù)時,表名后的字段可以省略,但是插入數(shù)據(jù)的具體值的數(shù)據(jù)類型、長度和先后順序必須和表結(jié)構(gòu)里面的一致;若只是插入某些字段,則必須列出插入字段對應(yīng)的字段名;(2)VALUE語句后的各個表達(dá)式的值即為插入的具體值。各表達(dá)式值的類型、長度和先后順序必須與指定的字段保持一致。任務(wù)7.1ADO.NET核心對象簡介預(yù)備知識7.1.2常用SQL語句3.?dāng)?shù)據(jù)更新操作數(shù)據(jù)更新操作用于修改數(shù)據(jù)表中的一條或多條記錄。語法格式如下:UPDATE<表名>SET<字段名1>=<表達(dá)式1>[,<字段名1>=<表達(dá)式1>…][WHERE<條件表達(dá)式>]說明:(1)通過SET語句可以用表達(dá)式值取代指定字段原有的值。(2)WHERE語句用于限定符合更新條件的記錄,此語句可以沒有,沒有的時候表示更新表中所有記錄的指定字段的值。任務(wù)7.1ADO.NET核心對象簡介預(yù)備知識7.1.2常用SQL語句4.?dāng)?shù)據(jù)刪除操作用于刪除數(shù)據(jù)表中符合條件的一條或多條記錄。語法格式為:DELETEFROM<表名>[WHERE<條件表達(dá)式>]舉例說明:實(shí)現(xiàn)增、刪、改、查的SQL語句用法。任務(wù)7.1ADO.NET核心對象簡介任務(wù)實(shí)施1.ADO.NET概述ADO.NET是.NET中一組用于和數(shù)據(jù)源進(jìn)行交互的面向?qū)ο箢悗欤峁┝藬?shù)據(jù)訪問的高層接口。ADO.NET允許和不同類型的數(shù)據(jù)源和數(shù)據(jù)庫進(jìn)行交互,數(shù)據(jù)源既可以是數(shù)據(jù)庫,也可以是文本文件、Excel表格或者XML文件。ADO.NET類最重要的優(yōu)點(diǎn)是支持與數(shù)據(jù)庫以斷開連接的方式工作,即ADO.NET可以操作非連接的數(shù)據(jù),這就意味著應(yīng)用程序和數(shù)據(jù)源的連接會變少,服務(wù)器端的負(fù)載也會得以減輕。ADO.NET類庫在System.Data命名空間內(nèi),根據(jù)訪問數(shù)據(jù)庫的不同System.Data命名空間被劃分為4個數(shù)據(jù)庫客戶命名空間,本書主要使用MicrosoftSqlServer2008數(shù)據(jù)庫進(jìn)行應(yīng)用程序開發(fā),因而在以后的章節(jié)中我們都使用System.Data.SqlClient命名空間。任務(wù)7.1ADO.NET核心對象簡介實(shí)現(xiàn)從“登錄窗體”到“添加學(xué)員窗體”的跳轉(zhuǎn)。當(dāng)“系統(tǒng)登錄”窗體和“添加學(xué)員用戶”窗體創(chuàng)建完成后,希望在登錄窗體中輸入用戶名和密碼,選擇“用戶類型”,點(diǎn)擊“登錄”按鈕后,跳轉(zhuǎn)到“添加學(xué)員用戶”窗體。這時,就需要在“登錄”按鈕的Click事件處理程序中。舉例說明:窗體跳轉(zhuǎn)方法。注意:此處使用了this.Hide()方法實(shí)現(xiàn)“用戶登錄窗體”的隱藏,也可以使用this.Visible=false;但是不能使用Close(),若使用了Close()方法則會導(dǎo)致程序的中止執(zhí)行。知識拓展任務(wù)7.1ADO.NET核心對象簡介2.ADO.NET核心組件ADO.NET的主要通過兩個核心組件來完成對數(shù)據(jù)庫的操作,分別是DataSet和.NET數(shù)據(jù)提供程序。前者是ADO.NET的斷開式結(jié)構(gòu)的核心組件。后者是專門為直接訪問數(shù)據(jù)庫,對其進(jìn)行快速的只進(jìn)、只讀訪問數(shù)據(jù)等數(shù)據(jù)處理而設(shè)計(jì)的組件,包含Connection、Command、DataReader和DataAdapter對象。圖7-1是利用ADO.NET操作數(shù)據(jù)庫的簡單示意圖。任務(wù)實(shí)施任務(wù)7.1ADO.NET核心對象簡介圖7-1利用ADO.NET操作數(shù)據(jù)庫的簡單示意圖3.ADO.NET常用對象ADO.NET對象模型中常用的對象有Connection對象、Command對象、DataReader對象、DataAdapter對象、DataSet對象。其功能如表7-9所示。任務(wù)實(shí)施任務(wù)7.1ADO.NET核心對象簡介表7-9ADO.NET中常用對象針對前面已經(jīng)介紹的“高校學(xué)生管理系統(tǒng)”,下面將對實(shí)現(xiàn)應(yīng)用程序所需要的數(shù)據(jù)庫MySchool中主要的數(shù)據(jù)表的表結(jié)構(gòu)介紹如下:(1)學(xué)生信息表(Student),主要用于存儲有關(guān)學(xué)生的各項(xiàng)信息,表結(jié)構(gòu)如教材表7-10所示。(2)管理員信息表(Admin),用于存儲有關(guān)管理員的信息,表結(jié)構(gòu)如教材表7-11所示。(3)教師信息表(Teacher),用于存儲教師的基本信息,表結(jié)構(gòu)如教材表7-12所示。知識拓展任務(wù)7.1ADO.NET核心對象簡介在本節(jié)中,首先回顧了關(guān)系數(shù)據(jù)庫及數(shù)據(jù)庫常用的SQL語句,然后向大家講解了ADO.NET核心組件與常用對象,最后對本書開發(fā)的“高校學(xué)生管理系統(tǒng)”所需要的數(shù)據(jù)庫中的表結(jié)構(gòu)進(jìn)行了說明。歸納總結(jié)任務(wù)7.1ADO.NET核心對象簡介任務(wù)7.2“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫連接實(shí)現(xiàn)任務(wù)描述在我們操作數(shù)據(jù)庫之前,首先要做的就是與數(shù)據(jù)庫創(chuàng)建連接。連接數(shù)據(jù)庫需要使用Connection對象,本節(jié)主要學(xué)習(xí)該對象的常用屬性和方法,理解使用該對象進(jìn)行數(shù)據(jù)庫連接的方法。要求實(shí)現(xiàn)與任務(wù)7.1創(chuàng)建的“學(xué)生管理系統(tǒng)”的數(shù)據(jù)庫的連接。預(yù)備知識不同的數(shù)據(jù)庫提供程序有不同的數(shù)據(jù)庫連接類,具體如表7-13所示。具體使用哪個連接類要看我們使用的是什么類型的數(shù)據(jù)庫,本教程示例及應(yīng)用程序都使用SQLServer2008數(shù)據(jù)庫提供程序,因而使用SqlConnection類。任務(wù)7.2“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫連接實(shí)現(xiàn)表7-13.NETFrmework數(shù)據(jù)提供程序及相應(yīng)的連接類預(yù)備知識7.2.1SqlConnection對象常用屬性SqlConnection對象常用屬性如表7-14所示。任務(wù)7.2“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫連接實(shí)現(xiàn)表7-14SqlConnection對象常用屬性預(yù)備知識7.2.1SqlConnection對象常用屬性ConnectionString屬性所要求的字符串必須是一個規(guī)范化的、符合語法要求的字符串。其內(nèi)容是由多個被分號分開的“參數(shù)名=參數(shù)值”組成。常用的參數(shù)名及含義如表7-15所示。任務(wù)7.2“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫連接實(shí)現(xiàn)表7-15ConnectionString屬性字符串常用參數(shù)表預(yù)備知識7.2.2SqlConnection常用方法SqlConnection對象常用方法如表7-16所示。在ADO.NET中,創(chuàng)建與數(shù)據(jù)庫的連接并且操作完數(shù)據(jù)庫后,必須顯式關(guān)閉與數(shù)據(jù)庫的連接,也就是說必須調(diào)用Connection對象的Close方法關(guān)閉連接。任務(wù)7.2“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫連接實(shí)現(xiàn)表7-16SqlConnection對象常用方法預(yù)備知識7.2.3DBHelper類為了實(shí)現(xiàn)與“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫的連接,我們在項(xiàng)目中添加DBHelper類,在該類中創(chuàng)建了數(shù)據(jù)庫的SqlConnection對象connection,并且聲明為靜態(tài)(static)的,因而在今后調(diào)用該對象時,使用“類名.對象名”(即DBHelper.connection)即可。舉例說明:DBHelper類的實(shí)現(xiàn)。任務(wù)7.2“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫連接實(shí)現(xiàn)任務(wù)實(shí)施編程實(shí)現(xiàn)任務(wù)7-2任務(wù)7.2“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫連接實(shí)現(xiàn)知識拓展創(chuàng)建數(shù)據(jù)庫連接一般需要經(jīng)歷以下幾個步驟:1.引入命名空間2.定義連接字符串3.創(chuàng)建Connection對象4.打開數(shù)據(jù)庫連接5.對數(shù)據(jù)庫進(jìn)行操作6.關(guān)閉數(shù)據(jù)庫連接任務(wù)7.2“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫連接實(shí)現(xiàn)歸納總結(jié)本節(jié)中,主要介紹ADO.NET常用對象中的Connection對象的常用屬性和方法,該對象是學(xué)習(xí)數(shù)據(jù)庫編程的第一步,通過示例練習(xí),應(yīng)能夠靈活掌握各種數(shù)據(jù)庫連接方式。任務(wù)7.2“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫連接實(shí)現(xiàn)任務(wù)7.3“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫打開時的異常處理任務(wù)描述在我們開發(fā)程序的過程中總是會不可避免地遇到這樣或那樣的錯誤,優(yōu)秀的程序員并不是不出現(xiàn)錯誤,而是能夠找出錯誤并更正它們,或者預(yù)知可能出現(xiàn)的錯誤或異常并運(yùn)用相應(yīng)的技術(shù)進(jìn)行處理。對于開發(fā)人員來說了解常見的錯誤類型,理解并能運(yùn)用C#語言的錯誤處理機(jī)制,是必備的程序設(shè)計(jì)技能。本節(jié)主要介紹程序中常見的錯誤類型和錯誤處理機(jī)制,然后介紹解決本書開發(fā)的“高校學(xué)生管理系統(tǒng)”在打開數(shù)據(jù)庫時的異常處理方法。預(yù)備知識7.3.1程序錯誤類型C#應(yīng)用程序開發(fā)過程中,根據(jù)錯誤產(chǎn)生的原因,通常將代碼中的錯誤(Bugs)分為3類:語法錯誤、運(yùn)行時錯誤、邏輯錯誤。1.語法錯誤語法錯誤是指在程序代碼中輸入了不符合C#語法規(guī)則的語句而產(chǎn)生的錯誤。如數(shù)據(jù)類型不匹配、變量未定義、函數(shù)未定義、輸入了非法的標(biāo)點(diǎn)符號等等。對于這類錯誤VS開發(fā)工具提供了自動檢查功能。對于出現(xiàn)錯誤的地方,VS會在相應(yīng)的語句下面出現(xiàn)藍(lán)色的波浪線。把鼠標(biāo)放在有波浪線的地方,系統(tǒng)會自動顯示一個提示框,提示錯誤出現(xiàn)的原因。另外,對于有語法錯誤的程序,如果直接調(diào)試的話,系統(tǒng)會在“錯誤列表”窗口給出錯誤信息,并告知錯誤的代碼行及錯誤原因。任務(wù)7.3“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫打開時的異常處理預(yù)備知識7.3.1程序錯誤類型2.運(yùn)行時錯誤運(yùn)行時錯誤是指在沒有語法錯誤的前提下,程序在運(yùn)行期間產(chǎn)生的錯誤。如數(shù)組下標(biāo)越界、除數(shù)為0、打開一個不存在的文件、數(shù)據(jù)庫未打開等等。3.邏輯錯誤邏輯錯誤是指程序能夠正常運(yùn)行,但是不能達(dá)到預(yù)期的效果。比如計(jì)算結(jié)果不正確、數(shù)據(jù)不能正常寫入數(shù)據(jù)庫等功能上的錯誤。這類錯誤產(chǎn)生的原因主要是由于算法設(shè)計(jì)不正確。程序員只能憑借經(jīng)驗(yàn),通過測試應(yīng)用程序和運(yùn)行結(jié)果來找到錯誤。舉例說明:三種錯誤類型。任務(wù)7.3“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫打開時的異常處理預(yù)備知識7.3.2異常處理在程序運(yùn)行期間出現(xiàn)的錯誤,會中斷或干擾程序的正常流程。而這部分錯誤有時候是可以預(yù)測的,C#語言也提供了處理這種錯誤的機(jī)制,稱為異常處理。當(dāng)程序運(yùn)行期時發(fā)生錯誤時,異常處理機(jī)制就能捕獲錯誤并創(chuàng)建異常對象,執(zhí)行異常處理代碼,使得應(yīng)用程序能夠繼續(xù)正常運(yùn)行。.NET提供了大量預(yù)定義的異常對象,為了在應(yīng)用程序的代碼中使用它們捕獲和處理錯誤,C#提供了try…catch…finally語句,程序員只用將程序代碼的相關(guān)部分分成3種不同的類型,分別放置于try語句塊、catch語句塊和finally語句塊就可以了。任務(wù)7.3“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫打開時的異常處理預(yù)備知識7.3.2異常處理格式:try{//可能出現(xiàn)異常的代碼}catch(異常類){//處理異常的代碼}finally{//清理資源工作,此部分可不寫}任務(wù)7.3“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫打開時的異常處理說明:(1)把實(shí)現(xiàn)程序正常功能并且可能出現(xiàn)異常的代碼放在try語句塊中。(2)如果在運(yùn)行期間出現(xiàn)了異常,程序就會跳轉(zhuǎn)到catch語句塊。(3)如果不出現(xiàn)異常,try語句塊中的代碼就會正常執(zhí)行,catch語句塊就不會被執(zhí)行。(4)一個程序中的catch語句塊可以有多個。(5)無論是否發(fā)生異常,如果程序包含有finally語句塊,則其一定會被執(zhí)行。任務(wù)實(shí)施編程實(shí)現(xiàn)任務(wù)7-3任務(wù)7.3“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫打開時的異常處理知識拓展1.有關(guān)異常類(1)Exception是所有異常類的基類。(2)與參數(shù)有關(guān)的異常類(3)與成員訪問有關(guān)的異常(4)與數(shù)組有關(guān)的異常(5)與算術(shù)有關(guān)的異常任務(wù)7.3“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫打開時的異常處理知識拓展2.異常處理的原則(1)不要對常見的錯誤使用異常處理,盡量使用判斷結(jié)構(gòu)來處理這些錯誤,如if語句等;(2)不要為流程的正常控制使用異常;(3)當(dāng)引發(fā)異常時,應(yīng)該提供有意義的異常信息;(4)當(dāng)有多個catch語句塊時,處理順序應(yīng)當(dāng)從特殊異常到一般異常。任務(wù)7.3“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫打開時的異常處理歸納總結(jié)在本節(jié)中,主要介紹了C#程序開發(fā)中經(jīng)常遇到的程序錯誤和異常處理方法,這些都是作為一個程序員必備的技能,因而在開發(fā)中要有意識地預(yù)測可能發(fā)生的運(yùn)行時錯誤,并能夠使用相應(yīng)的異常處理機(jī)制,對特定的代碼段進(jìn)行異常處理,保障程序的正常執(zhí)行。在后續(xù)介紹實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”的各部分功能時,都會使用到異常處理機(jī)制,以保證應(yīng)用程序的健壯性。任務(wù)7.3“高校學(xué)生管理系統(tǒng)”數(shù)據(jù)庫打開時的異常處理任務(wù)7.4Command對象簡介任務(wù)描述前面我們已經(jīng)介紹了如何與數(shù)據(jù)庫建立連接,在建立連接之后就要去操作數(shù)據(jù)庫,如查詢數(shù)據(jù)、新增數(shù)據(jù)、更新數(shù)據(jù)或刪除數(shù)據(jù)等,所有這些操作的完成都需要有Command對象的支持。本節(jié)將介紹該對象的使用。預(yù)備知識與Connection對象一樣,Command對象屬于.NETFramwork數(shù)據(jù)提供程序,不同的數(shù)據(jù)提供程序都有自己的Command對象,不同的數(shù)據(jù)庫提供程序有不同的數(shù)據(jù)庫連接類,如表7-17所示。具體使用哪個連接類要看我們使用的是什么類型的數(shù)據(jù)庫,本教材示例及應(yīng)用程序都使用SQLServer2008數(shù)據(jù)庫提供程序,因而使用SqlCommand類。任務(wù)7.4Command對象簡介表7-17.NETFrmework數(shù)據(jù)提供程序及相應(yīng)的Command類預(yù)備知識7.4.1Command對象常用屬性Command對象常用屬性如表7-18所示。任務(wù)7.4Command對象簡介表7-18Command對象常用屬性預(yù)備知識7.4.2Command對象常用方法Command對象常用方法如表7-19所示。任務(wù)7.4Command對象簡介表7-19Command對象常用方法任務(wù)實(shí)施編程實(shí)現(xiàn)任務(wù)7-4任務(wù)7.4Command對象簡介知識拓展1.使用Command對象的步驟(1)創(chuàng)建數(shù)據(jù)庫連接(2)定義執(zhí)行的SQL語句(3)創(chuàng)建Command對象(4)執(zhí)行SQL語句或存儲過程2.使用Command對象執(zhí)行帶參數(shù)的SQL語句3.使用Command對象執(zhí)行存儲過程舉例說明:執(zhí)行帶參SQL語句和存儲過程的方法。任務(wù)7.4Command對象簡介歸納總結(jié)Command對象是開發(fā)數(shù)據(jù)庫應(yīng)用程序時非常重要的一個對象,通過本節(jié)課程的介紹,要理解并掌握其不同的創(chuàng)建方法,熟練掌握常用的三個方法方法ExecuteNonQuery()、ExecuteScalar()和ExecuteReader()的不同功能,能夠使用這幾個方法實(shí)現(xiàn)數(shù)據(jù)庫的增、刪、改、查操作。任務(wù)7.4Command對象簡介任務(wù)7.5實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”的登錄功能任務(wù)描述為了進(jìn)入學(xué)生管理系統(tǒng),用戶需要進(jìn)行登錄驗(yàn)證,輸入有效的用戶名和密碼。前面我們已經(jīng)設(shè)計(jì)了系統(tǒng)的登錄界面,當(dāng)用戶名或密碼有誤時,會給出對應(yīng)提示,如圖7-8所示。本節(jié)就首先使用我們學(xué)習(xí)的Connection對象連接數(shù)據(jù)庫,然后使用的Command對象的ExecuteScalar()方法來完成登錄功能。登錄時要判斷輸入的用戶名、密碼及用戶類型是否在對應(yīng)的數(shù)據(jù)表中有記錄,這可以使用Command對象的ExecuteScalar()方法執(zhí)行Select語句返回查詢結(jié)果,然后判斷是否有與條件匹配的記錄存在。圖7-8用戶登錄失敗效果任務(wù)7.5實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”的登錄功能預(yù)備知識在用戶打開“學(xué)生管理系統(tǒng)”的登錄界面,進(jìn)行登錄的時候要進(jìn)行必要的驗(yàn)證,比如用戶名密碼是否輸入,是否選擇了用戶類型,若有輸入是否輸入正確匹配等。下面我們對登錄功能及功能實(shí)現(xiàn)進(jìn)行分析7.5.1用戶登錄功能需求分析(1)當(dāng)沒有輸入戶名、密碼或沒有選擇用戶類型而直接點(diǎn)擊“登錄”按鈕時,會給出對應(yīng)的提示,提示效果在前面的章節(jié)中我們已經(jīng)學(xué)習(xí)過,此處不再說明。(2)當(dāng)輸入用戶名或密碼與數(shù)據(jù)庫中的數(shù)據(jù)不匹配時,提示效果如圖7-8。任務(wù)7.5實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”的登錄功能預(yù)備知識7.5.2用戶登錄功能實(shí)現(xiàn)方法(1)實(shí)現(xiàn)功能的代碼在“登錄”按鈕的Click事件里;(2)首先驗(yàn)證是否輸入了用戶名、密碼,是否選擇了用戶類型,如果有缺項(xiàng)使用對話框給出對應(yīng)提示,并將光標(biāo)定位;(3)如果輸入了用戶名、密碼,并且選擇了用戶類型,則根據(jù)用戶類型,驗(yàn)證用戶名和密碼是否正確。此功能的實(shí)現(xiàn)需要進(jìn)入數(shù)據(jù)庫中相應(yīng)的表中查詢是否有與用戶輸入的用戶名、密碼和類型相匹配的記錄,當(dāng)用戶類型是“管理員”時,則進(jìn)入管理員信息表(Admin)查找是否有匹配記錄,當(dāng)用戶類型時“學(xué)員”時,則進(jìn)入學(xué)生信息表(Student)查找是否有匹配記錄。(4)根據(jù)(3)中查找的結(jié)果,如果有匹配記錄就打開對應(yīng)的窗口。否則就提示有戶名或密碼有誤。任務(wù)實(shí)施編程實(shí)現(xiàn)任務(wù)7-5任務(wù)7.5實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”的登錄功能任務(wù)7.5實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”的登錄功能知識拓展1.ExecuteScalar返回值問題(1)當(dāng)該方法與聚合函數(shù)(count,max,min,average)一起使用時,可以將執(zhí)行結(jié)果顯式轉(zhuǎn)換為一個int類型,如本例就是使用了count函數(shù)。(2)當(dāng)該方法不與聚合函數(shù)一起使用時,當(dāng)執(zhí)行查詢結(jié)果的第一行第一列無值時,返回一個NULL,有具體值時,根據(jù)其值進(jìn)行類型轉(zhuǎn)換,返回結(jié)果。2.常見錯誤(1)在執(zhí)行SQL語句或存儲過程之前數(shù)據(jù)庫連接未打開;(2)使用Command對象的ExecuteScalar()方法執(zhí)行SQL語句或存儲過程后沒有進(jìn)行顯式類型轉(zhuǎn)換。任務(wù)7.5實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”的登錄功能歸納總結(jié)Command對象的ExecuteScalar()方法是開發(fā)數(shù)據(jù)庫應(yīng)用程序中常用的一個方法,利用它可以檢驗(yàn)對數(shù)據(jù)庫的查詢操作是否有有效的結(jié)果,要理解其返回值問題,能夠?qū)Ψ祷刂颠M(jìn)行正確的類型轉(zhuǎn)換及判斷。任務(wù)7.6實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”查詢?nèi)繉W(xué)生信息功能任務(wù)描述大多應(yīng)用程序都提供的有查詢功能,用戶可以根據(jù)一定的條件進(jìn)行查詢,系統(tǒng)將查詢結(jié)果顯示給用戶,這一功能的實(shí)現(xiàn)就需要使用Command對象的ExecuteReader()方法,該方法返回一個DataReader對象,通過DataReader對象從數(shù)據(jù)庫中讀取數(shù)據(jù)。本任務(wù)主要介紹ExecuteReader()方法及DataReader對象的常用屬性和方法,實(shí)現(xiàn)查詢學(xué)生信息功能。任務(wù)7.6實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”查詢?nèi)繉W(xué)生信息功能預(yù)備知識7.6.1SqlDataReader對象簡介與Connection對象、Command對象一樣,DataReader對象屬于.NETFramwork數(shù)據(jù)提供程序,不同的數(shù)據(jù)提供程序都有自己的DataReader對象,不同的數(shù)據(jù)庫提供程序有不同的數(shù)據(jù)庫連接類,如表7-20所示。表7-20.NETFrmework數(shù)據(jù)提供程序及相應(yīng)的DataReader類任務(wù)7.6實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”查詢?nèi)繉W(xué)生信息功能預(yù)備知識7.6.1SqlDataReader對象簡介SqlDataReader提供一種從數(shù)據(jù)庫讀取只讀數(shù)據(jù)流的方式。不能對讀取的數(shù)據(jù)進(jìn)行修改,所以其是只讀的單向的數(shù)據(jù)流,而且在讀取數(shù)據(jù)的時候,要始終保持與數(shù)據(jù)庫的連接。但是其占用資源非常少,每次只有一條記錄存在其中。SqlDataReader對象的主要屬性和方法如表7-21所示。表7-21SqlDataReader對象的主要屬性和方法任務(wù)實(shí)施編程實(shí)現(xiàn)任務(wù)7-6任務(wù)7.6實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”查詢?nèi)繉W(xué)生信息功能任務(wù)7.6實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”查詢?nèi)繉W(xué)生信息功能知識拓展下面我們對DataReader使用的步驟做如下總結(jié)。(1)創(chuàng)建Command對象(2)調(diào)用ExecuteReader()創(chuàng)建DataReader對象(3)使用DataReader的Read()方法逐行讀取數(shù)據(jù)(4)讀取當(dāng)前行的某列的數(shù)據(jù)(5)關(guān)閉DataReader對象調(diào)用它的Close()方法任務(wù)7.6實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”查詢?nèi)繉W(xué)生信息功能歸納總結(jié)在本節(jié)中,主要介紹了使用Command對象的ExecuteReader()方法生成DataReader對象的方法,掌握DataReader對象的使用步驟和及注意事項(xiàng),是作為一個程序開發(fā)人員必備的技能之一。任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能任務(wù)描述在學(xué)生管理系統(tǒng)主界面中點(diǎn)擊工具欄上的“查詢及修改學(xué)員”工具按鈕就會彈出如圖7-10所示的“查找學(xué)員用戶”窗口。用戶在用戶名后面的文本框中輸入查詢關(guān)鍵字,點(diǎn)擊“查找”按鈕就能夠查找到與關(guān)鍵字有關(guān)的學(xué)員信息,并將信息顯示在窗體上的ListView控件中。本任務(wù)將主要講解使用ListView控件顯示查詢結(jié)果的方法。圖7-10查找學(xué)員用戶界面任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能預(yù)備知識7.7.1ListView列表視圖控件介紹ListView控件可以顯示帶圖標(biāo)的項(xiàng)列表,用戶可使用該控件創(chuàng)建類似Win7系統(tǒng)計(jì)算機(jī)功能的用戶界面,就是通過ListView控件實(shí)現(xiàn)的。任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能預(yù)備知識7.7.1ListView列表視圖控件介紹1.常用屬性ListView控件常用屬性及說明如教材表7-22所示。下面對比較重要的屬性進(jìn)行詳細(xì)介紹:(1)View屬性。用于獲取或設(shè)置項(xiàng)在控件中的顯示方式。View的屬性值及說明如表7-23所示。表7-23View屬性取值及說明任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能預(yù)備知識7.7.1ListView列表視圖控件介紹(2)FullrowSelect屬性。用于指定是只選擇某一項(xiàng),還是選擇某一項(xiàng)所在的整行,如果單擊某項(xiàng)會選擇該項(xiàng)及其所有子項(xiàng),則為True;如果單擊某項(xiàng)僅選擇項(xiàng)本身,則為False。默認(rèn)為False。說明:除非將ListView控件的View屬性設(shè)置為Details,否則FullRowSelect屬性無效。在ListView顯示帶有許多子項(xiàng)的項(xiàng)時,通常使用FullrowSelect屬性。(3)GridLines屬性。指定在包含控件中項(xiàng)及其子項(xiàng)的行和列之間是否顯示網(wǎng)格線,如果在項(xiàng)及其子項(xiàng)的周圍繪制網(wǎng)格線,則為True;否則為False。默認(rèn)為False。說明:除非將ListView控件的View屬性設(shè)置為Details,否則GridLines屬性無效。任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能預(yù)備知識7.7.1ListView列表視圖控件介紹2.常用方法與事件ListView常用方法與事件如表7-24所示。表7-24ListView常用方法任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能預(yù)備知識7.7.1ListView列表視圖控件介紹3.ListViewItem列表視圖中的選項(xiàng)總是ListViewItem類的一個實(shí)例。ListViewItem包含要顯示的信息,如文本和圖標(biāo)的索引。ListViewItems有一個SubItems屬性,其中包含另一個類ListViewSubItem的實(shí)例。如果ListView控件處于Details或Tile模式下,這些子項(xiàng)就會顯示出來。每個子選項(xiàng)表示列表視圖中的一個列。子項(xiàng)和主選項(xiàng)之間的區(qū)別是,子選項(xiàng)不能顯示圖標(biāo)。通過Items集合吧ListViewItems添加到ListView中,通過ListViewItem上的SubItems集合把ListViewSubItems添加到ListViewItem中。任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能預(yù)備知識7.7.1ListView列表視圖控件介紹4.ColumnHeader要使用列表視圖顯示列標(biāo)題,需要把類ColumnHeader的實(shí)例添加到ListView的Column生集合中,當(dāng)ListView控件處于Details模式下時,Columnheaders為要顯示的列提供一個標(biāo)題。任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能預(yù)備知識7.7.2ListView控件簡單應(yīng)用舉例說明:使用ListView控件實(shí)現(xiàn)“我的電腦”本地磁盤詳細(xì)信息功能。圖7-12模擬“我的電腦”效果圖任務(wù)實(shí)施編程實(shí)現(xiàn)任務(wù)7-7任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能知識拓展1.ImageList控件簡介ImageList控件是一個圖片集管理器,支持bmp、gif和jpg等圖像格式。主要用于緩存用戶預(yù)定義好的圖片列表信息,該控件不可以單獨(dú)使用顯示圖片內(nèi)容,必須和其他控件聯(lián)合使用才可以顯示預(yù)先存儲其中的圖片內(nèi)容。另外在窗體上添加一個ImageList控件時,它不會出現(xiàn)在窗體上,而是出現(xiàn)在窗體的下方。其基本的屬性和方法定義如表7-26所示:表7-25ImageList控件常用屬性和方法任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能知識拓展2.ImageList控件簡單應(yīng)用舉例說明:實(shí)現(xiàn)“我的電腦”磁盤顯示的“大圖標(biāo)”、“小圖標(biāo)”、“詳細(xì)列表”顯示效果。任務(wù)7.7實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”模糊查詢功能歸納總結(jié)在本節(jié)中,通過實(shí)例介紹了ListView控件的簡單應(yīng)用,及其與ImageList控件結(jié)合實(shí)現(xiàn)Windows資源管理器功能;要理解ListView控件的5種視圖模式。ImageList控件能夠?yàn)榇绑w其他控件提供圖像的應(yīng)用。重點(diǎn)要理解并掌握使用ListView控件顯示多行信息功能的實(shí)現(xiàn)。任務(wù)7.8實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”添加學(xué)員功能任務(wù)描述在前面的任務(wù)中,我們設(shè)計(jì)了“高校學(xué)生管理系統(tǒng)”的創(chuàng)建學(xué)員用戶的界面,如圖5-2所示,在本節(jié)中,我們將利用Command對象的ExecuteNonQuery()方法,實(shí)現(xiàn)對MySchool數(shù)據(jù)庫中學(xué)生表(Student)增加一條記錄操作。添加學(xué)員用戶成功后的效果如圖7-20所示。圖7-20添加學(xué)員用戶界面任務(wù)7.8實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”添加學(xué)員功能預(yù)備知識7.8.1ExecuteNonQuery()方法簡介在前面的任務(wù)中,我們使用ExecuteScalar()方法與ExecuteReader()方法實(shí)現(xiàn)了從數(shù)據(jù)庫中查詢記錄的功能。那么怎樣對數(shù)據(jù)表中記錄進(jìn)行增刪改呢?這就需要使用Command對象的ExecuteNonQuery()方法。ExecuteNonQuery()方法,是Command對象的中的一個極其重要的方法,其返回值是一個int類型的數(shù)據(jù),代表受SQL語句影響的行數(shù)。ExecuteNonQuery()方法執(zhí)行特定的SQL語句,如Insert、Update、Delete。任務(wù)7.8實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”添加學(xué)員功能預(yù)備知識7.8.1ExecuteNonQuery()方法簡介使用Command對象的ExecuteNonQuery()方法的步驟:1.定義數(shù)據(jù)庫連接字符串2.創(chuàng)建Connection對象3.定義要執(zhí)行的sql語句4.創(chuàng)建Command對象5.調(diào)用Connection對象的Open()方法打開數(shù)據(jù)庫6.執(zhí)行ExecuteNonQuery()方法7.調(diào)用Connection對象的Close()方法關(guān)閉數(shù)據(jù)庫8.根據(jù)返回的結(jié)果進(jìn)行后續(xù)的處理我們可以通過它的返回結(jié)果知道執(zhí)行的情況,如果返回值小于或等于0,說明沒有記錄受到影響。任務(wù)7.8實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”添加學(xué)員功能任務(wù)實(shí)施編程實(shí)現(xiàn)任務(wù)7-8任務(wù)7.8實(shí)現(xiàn)“高校學(xué)生管理系統(tǒng)”添
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025Ha居間合同求盤
- 2025原材料買賣合同
- 2025合資經(jīng)營企業(yè)合作合同
- 課題申報(bào)參考:馬克思恩格斯對“慈善資本化”的本質(zhì)批判及其當(dāng)代價值研究
- 科技驅(qū)動下的創(chuàng)業(yè)與職業(yè)發(fā)展新模式
- 2024年電子式金屬、非金屬試驗(yàn)機(jī)項(xiàng)目資金申請報(bào)告代可行性研究報(bào)告
- 數(shù)學(xué)課堂中的師生互動與思維能力培養(yǎng)
- 節(jié)能環(huán)保洗浴中心裝修技術(shù)解析
- (2020年編輯)新版GSP零售藥店質(zhì)量管理手冊
- 2025年滬科版選擇性必修3化學(xué)上冊階段測試試卷含答案
- 電纜擠塑操作手冊
- 浙江寧波鄞州區(qū)市級名校2025屆中考生物全真模擬試卷含解析
- 2024-2025學(xué)年廣東省深圳市南山區(qū)監(jiān)測數(shù)學(xué)三年級第一學(xué)期期末學(xué)業(yè)水平測試試題含解析
- IATF16949基礎(chǔ)知識培訓(xùn)教材
- 【MOOC】大學(xué)生創(chuàng)新創(chuàng)業(yè)知能訓(xùn)練與指導(dǎo)-西北農(nóng)林科技大學(xué) 中國大學(xué)慕課MOOC答案
- 勞務(wù)派遣公司員工考核方案
- 基礎(chǔ)生態(tài)學(xué)-7種內(nèi)種間關(guān)系
- 2024年光伏農(nóng)田出租合同范本
- 《阻燃材料與技術(shù)》課件 第3講 阻燃基本理論
- 2024-2030年中國黃鱔市市場供需現(xiàn)狀與營銷渠道分析報(bào)告
- 新人教版九年級化學(xué)第三單元復(fù)習(xí)課件
評論
0/150
提交評論