版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、模塊06基于存儲(chǔ)過程的項(xiàng)目設(shè)計(jì)與應(yīng)用 數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)與項(xiàng)目應(yīng)用課程8/7/20221江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系工作任務(wù)與學(xué)習(xí)目標(biāo)06模塊8/7/20222江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系Preface Transact-SQL是微軟對(duì)SQL的擴(kuò)展,具有SQL的主要特點(diǎn),同時(shí)增加了變量、運(yùn)算符、函數(shù)、流程控制和注釋等語言元素,使得其功能更加強(qiáng)大。而存儲(chǔ)過程是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中。存儲(chǔ)過程是數(shù)據(jù)庫中的一個(gè)重要對(duì)象,任何一個(gè)設(shè)計(jì)良好的數(shù)據(jù)庫應(yīng)用程序都會(huì)用到存儲(chǔ)過程。 8/7/20223江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1任務(wù)6-1 任課教師課程班成績查詢 8/7/20224
2、江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1 課程班成績查詢 當(dāng)學(xué)期末課程教學(xué)結(jié)束后,任課老師在考試后要將學(xué)生的成績錄入到“教學(xué)管理系統(tǒng)”中,在隨后的日期中,任課教師還要經(jīng)常查詢自己任教課程班的學(xué)生成績。請(qǐng)以編碼為“T080040401”的課程班為例,用存儲(chǔ)過程實(shí)現(xiàn)任課教師的課程班成績查詢T-SQL語句。 【任務(wù)描述與分析】8/7/20225江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1 課程班成績查詢 存儲(chǔ)過程是利用SQL Server所提供的Transact-SQL語言所編寫的程序,是由流控制和SQL語句書寫的過程,這個(gè)過程經(jīng)編譯和優(yōu)化后存儲(chǔ)在數(shù)據(jù)庫服務(wù)器中,應(yīng)用程序使用時(shí)只要調(diào)用即可。 【相關(guān)知識(shí)與技能】8/
3、7/20226江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1 課程班成績查詢【相關(guān)知識(shí)與技能】 存儲(chǔ)過程的能力大大增強(qiáng)了SQL語言的功能和靈活性。存儲(chǔ)過程可以用流控制語句編寫,有很強(qiáng)的靈活性,可以完成復(fù)雜的判斷和較復(fù)雜的運(yùn)算。 可保證數(shù)據(jù)的安全性和完整性。 在運(yùn)行存儲(chǔ)過程前,數(shù)據(jù)庫已對(duì)其進(jìn)行了語法和句法分析,并給出了優(yōu)化執(zhí)行方案。這種已經(jīng)編譯好的過程可極大地改善SQL語句的性能。由于執(zhí)行SQL語句的大部分工作已經(jīng)完成,所以存儲(chǔ)過程能以極快的速度執(zhí)行。 可以降低網(wǎng)絡(luò)的通信量。 將體現(xiàn)企業(yè)規(guī)則的運(yùn)算程序放入數(shù)據(jù)庫服務(wù)器中,以便集中控制,或當(dāng)企業(yè)規(guī)則發(fā)生變化時(shí)在服務(wù)器中改變存儲(chǔ)過程即可,無須修改任何應(yīng)用程序。
4、存儲(chǔ)過程的優(yōu)點(diǎn)8/7/20227江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1 課程班成績查詢【相關(guān)知識(shí)與技能】 存儲(chǔ)過程的種類 系統(tǒng)存儲(chǔ)過程以SP_開頭,用來進(jìn)行系統(tǒng)的各項(xiàng)設(shè)定、取得信息和相關(guān)管理工作。 擴(kuò)展存儲(chǔ)過程:以XP_開頭,用來調(diào)用操作系統(tǒng)提供的功能。 用戶自定義的存儲(chǔ)過程就是我們一般所指的存儲(chǔ)過程。8/7/20228江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1 課程班成績查詢創(chuàng)建存儲(chǔ)過程的語法如下所示: 其中存儲(chǔ)過程名不能超過128個(gè)字符,每個(gè)存儲(chǔ)過程中最多設(shè)定1024個(gè)參數(shù)。 存儲(chǔ)過程的創(chuàng)建、執(zhí)行與刪除CREATE PROCEDURE 存儲(chǔ)過程名 (參數(shù)1, , 參數(shù)1024)AS SQL語句行【相關(guān)
5、知識(shí)與技能】8/7/20229江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1 課程班成績查詢上述語法中參數(shù)的使用方法如下: 參數(shù)名前要有一個(gè)“”符號(hào),每一個(gè)存儲(chǔ)過程的參數(shù)僅為該程序內(nèi)部使用,參數(shù)的類型除了IMAGE外,其他SQL Server所支持的數(shù)據(jù)類型都可使用。=初始值相當(dāng)于我們?cè)趧?chuàng)建存儲(chǔ)過程時(shí)設(shè)定的一個(gè)默認(rèn)值。OUTPUT是用來指定該參數(shù)為輸出參數(shù)。參數(shù)名 數(shù)據(jù)類型 =初始值 OUTPUTCREATE PROCEDURE 存儲(chǔ)過程名 (參數(shù)1, , 參數(shù)1024)AS SQL語句行【相關(guān)知識(shí)與技能】8/7/202210江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1 課程班成績查詢創(chuàng)建完存儲(chǔ)過程后,可以用下述T
6、-SQL語句來執(zhí)行它。 如果要?jiǎng)h除一個(gè)已經(jīng)創(chuàng)建好的存儲(chǔ)過程,可以用下述T-SQL語句來實(shí)現(xiàn)。 EXEC 存儲(chǔ)過程名 參數(shù)值 當(dāng)然,可以使用系統(tǒng)存儲(chǔ)過程“SP_HELP”和“SP_HELPTEXT”分別來查看存儲(chǔ)過程的狀態(tài)和內(nèi)容。DROP PROCEDURE 存儲(chǔ)過程名1, 存儲(chǔ)過程名2, 【相關(guān)知識(shí)與技能】8/7/202211江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1 課程班成績查詢【任務(wù)實(shí)施與拓展】 (1)在SSMS窗口的【新建查詢】窗口中輸入如下T-SQL語句。 (2)單擊【執(zhí)行】按鈕,即可在“教學(xué)管理系統(tǒng)”數(shù)據(jù)庫中創(chuàng)建相應(yīng)的存儲(chǔ)過程“CourseClassGradeQuery”。 USE DB_
7、TeachingMSGOCREATE PROCEDURE CourseClassGradeQueryAS SELECT TG.StuID,StuName,CommonScore,MiddleScore,LastScore,TotalScore FROM TB_Grade TG,TB_Student TS WHERE TG.StuID=TS.StuID AND CourseClassID=T0800404018/7/202212江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1 課程班成績查詢【任務(wù)實(shí)施與拓展】 (3)繼續(xù)在【查詢】窗口中輸入如下執(zhí)行存儲(chǔ)過程的T-SQL語句。 (4)單擊【執(zhí)行】按鈕,得到如圖所
8、示的查詢結(jié)果。 EXEC CourseClassGradeQuery8/7/202213江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1 課程班成績查詢【任務(wù)實(shí)施與拓展】【 任務(wù)拓展 】 上面創(chuàng)建的存儲(chǔ)過程只能查詢一個(gè)課程班的學(xué)生成績,不能動(dòng)態(tài)地查詢不同課程班的學(xué)生成績。為了根據(jù)【課程班編碼】靈活地進(jìn)行學(xué)生的成績查詢,需要在上述存儲(chǔ)過程中引入一個(gè)參數(shù),用來給存儲(chǔ)過程傳遞【課程班編碼】,然后存儲(chǔ)過程再根據(jù)傳遞來的【課程班編碼】進(jìn)行相關(guān)的學(xué)生成績查詢。創(chuàng)建帶【課程班編碼】參數(shù)的存儲(chǔ)過程的T-SQL語句如下所示。8/7/202214江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-1 課程班成績查詢【任務(wù)實(shí)施與拓展】USE DB_
9、TeachingMSGOCREATE PROCEDURE CourseClassGradeQuery CourseClassID CHAR(10)AS SELECT TG.StuID,StuName,CommonScore,MiddleScore,LastScore,TotalScore FROM TB_Grade TG,TB_Student TS WHERE TG.StuID=TS.StuID AND CourseClassID=CourseClassID單擊【執(zhí)行】按鈕,即可創(chuàng)建該存儲(chǔ)過程。如要查詢課程班編碼為“T080010401”的存儲(chǔ)過程,可以用下述T-SQL語句實(shí)現(xiàn)。EXEC Co
10、urseClassGradeQuery T080010401 如果要給這個(gè)帶【課程班編碼】參數(shù)的存儲(chǔ)過程在創(chuàng)建時(shí),賦予一個(gè)初始值的話,該如何實(shí)現(xiàn)? 8/7/202215江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增的學(xué)生記錄添加 8/7/202216江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增 在某個(gè)班級(jí)新生記錄添加的時(shí)候,學(xué)號(hào)不用手工輸入,系統(tǒng)將統(tǒng)計(jì)出這個(gè)班級(jí)已有學(xué)生的最大學(xué)號(hào),然后在其基礎(chǔ)上做自動(dòng)加1處理后插入到學(xué)生表中。插入學(xué)生記錄的流程如圖所示。 請(qǐng)以班級(jí)編碼為“050802”的“05軟件(2)班”為例,用存儲(chǔ)過程實(shí)現(xiàn)學(xué)號(hào)自增的學(xué)生記錄插入功能。 【任務(wù)描述與分析】8/
11、7/202217江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增【任務(wù)描述與分析】8/7/202218江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增 注釋是指代碼中不執(zhí)行的文本字符串,也稱為注解。SQLserver中有兩種類型的注釋字符,一種是ANSI標(biāo)準(zhǔn)的行注釋符“-”,另一種是與C語言相同的程序塊注釋符,即“/*/”?!?”用于每行的開頭,可以標(biāo)識(shí)一行文字為注釋?!?*”用于注釋文字的開頭,“*/”用于注釋文字的末尾,塊注釋符可以標(biāo)識(shí)多行文字為注釋。 【相關(guān)知識(shí)與技能】8/7/202219江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增【相關(guān)知識(shí)與技能】 常量也稱文字值或標(biāo)量值,是指在程
12、序運(yùn)行過程中其值始終固定不變的量,而變量則是在程序運(yùn)行過程中其值可以變化的量。在SQL Server中,常量和變量在使用之前都必須定義。 變量是一種語言中必不可少的組成部分。T-SQL語言中有兩種形式的變量,一種是系統(tǒng)提供的全局變量,另一種是用戶自己定義的局部變量。 全局變量是SQLServer系統(tǒng)內(nèi)部的變量其作用范圍并不僅僅局限于某一程序。而是任何程序均可以隨時(shí)調(diào)用,全局變量通常存儲(chǔ)一些SQLServer的配置設(shè)定值和統(tǒng)計(jì)數(shù)據(jù)。 全局變量時(shí),必須以標(biāo)記符“”開頭 常量與變量8/7/202220江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增【相關(guān)知識(shí)與技能】變量名稱作 用rowcount前一
13、條sql語句處理的行數(shù)error前一條sql語句報(bào)錯(cuò)的錯(cuò)誤號(hào)servername本地SQL Server的名稱nestlevel存儲(chǔ)過程/觸發(fā)器中嵌套層fetch_status有表中上條fetch語句的狀態(tài)常用全局變量8/7/202221江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增 局部變量是一個(gè)能夠擁有特定數(shù)據(jù)類型的對(duì)象,它的作用范圍僅限制在程序內(nèi)部。局部變量必須以“”開頭,而且必須先用DECLARE命令定義后才可以使用。聲明局部變量語句如下: 【相關(guān)知識(shí)與技能】DECLARE 變量 變量類型, 變量 變量類型, .其中,變量類型可以是SQLserver支持所有數(shù)據(jù)類型,也可以是用戶自定
14、義的數(shù)據(jù)類型。在T-SQL中,必須使用SELECT或SET命令來設(shè)定變量的值,局部變量賦值語句如下: SELECT 局部變量變量值或SET 局部變量變量值注意:字符串常量用Unicode字符串常量表示為N。 8/7/202222江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增 運(yùn)算符可以分為:算術(shù)運(yùn)算符、賦值運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、字符串運(yùn)算符、位運(yùn)算符和一元運(yùn)算符。表達(dá)式是由常量、變量、運(yùn)算符和函數(shù)等組成的,它可以在查詢語句中的任何位置使用。 【相關(guān)知識(shí)與技能】優(yōu)先級(jí)運(yùn)算符1(位非)2*(乘)、/(除)、%(取模)3+(正)、-(負(fù))、+(加)、+(連接)、-(減)、&(位與)4=、
15、=、=、!=、!、! (比較運(yùn)算符)5(連接)、|(連接)6NOT7AND8ALL、ANY、BETWEEN、IN、LIKE、OR、SOME9=(賦值) 運(yùn)算符與表達(dá)式 8/7/202223江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增 流程控制語句就是用來控制程序執(zhí)行方向的語句,又被稱為流控制語句。它主要包括:條件判斷控制結(jié)構(gòu)、SELECT CASE控制結(jié)構(gòu)、循環(huán)控制結(jié)構(gòu)、跳轉(zhuǎn)控制結(jié)構(gòu)、中斷延遲程序控制結(jié)構(gòu)和程序錯(cuò)誤控制結(jié)構(gòu)等。 BEGINEND可以定義T-SQL語句塊,這些語句塊作為一組語句執(zhí)行,同時(shí)BEGINEND語句允許嵌套。 【相關(guān)知識(shí)與技能】 IFELSE流程控制語句 BEGINE
16、ND語句塊BEGIN SQL語句END8/7/202224江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增IFSQL語句塊1ELSE SQL語句塊2 IFELSE語句根據(jù)判斷條件來決定程序執(zhí)行的流向。如果條件為真,則執(zhí)行IF關(guān)鍵字后面的語句塊;如果條件為假,則執(zhí)行ELSE關(guān)鍵字后面的語句塊。 【相關(guān)知識(shí)與技能】 IFELSE語句 數(shù)據(jù)類型轉(zhuǎn)換函數(shù)函 數(shù)說 明CAST(表達(dá)式 AS 目標(biāo)數(shù)據(jù)類型)將表達(dá)式轉(zhuǎn)換為目標(biāo)數(shù)據(jù)類型的值CONVERT(目標(biāo)數(shù)據(jù)類型, 表達(dá)式)將表達(dá)式轉(zhuǎn)換為目標(biāo)數(shù)據(jù)類型的值8/7/202225江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增 存儲(chǔ)過程中的參數(shù)有兩類:輸入?yún)?shù)
17、和輸出參數(shù)。 通過定義輸入?yún)?shù),可以在存儲(chǔ)過程執(zhí)行時(shí)傳遞不同的動(dòng)態(tài)值。 通過定義輸出參數(shù),可以從存儲(chǔ)過程中返回一個(gè)或多個(gè)值。為了使用輸出參數(shù),必須在CREATE PROCEDURE語句和EXECUTE語句中使用OUTPUT關(guān)鍵字。同時(shí),為了得到某一存儲(chǔ)過程的返回值,需要定義一個(gè)變量來存放返回參數(shù)的值,在該存儲(chǔ)過程的調(diào)用語句中,必須為這個(gè)變量加上OUTPUT關(guān)鍵字來聲明。 創(chuàng)建完帶參數(shù)的存儲(chǔ)過程后,如果要執(zhí)行它,有兩種傳遞參數(shù)的方式:按位置順序傳遞 、通過參數(shù)名傳遞 ?!皡?shù)名=參數(shù)值” 【相關(guān)知識(shí)與技能】 帶參數(shù)的存儲(chǔ)過程8/7/202226江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增【任
18、務(wù)實(shí)施與拓展】 (1)在SSMS的【新建查詢】窗口中輸入如下T-SQL語句。 USE DB_TeachingMSGOCREATE PROCEDURE AutoGetStuID ClassID CHAR(6),NewStuID CHAR(8) OUTPUT AS-定義變量-DECLARE MaxStuID CHAR(8),CharTwoStuID CHAR(2),IntTwoStuID INT -獲取班級(jí)中已有學(xué)生中最大學(xué)號(hào)-SET MaxStuID = (SELECT MAX(StuID) FROM TB_Student WHERE ClassID=ClassID) -SELECT MaxSt
19、uID IF MaxStuID IS NULL SET NewStuID = ClassID+018/7/202227江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增 ELSE BEGIN -從最大學(xué)號(hào)中獲取班級(jí)編碼和最后兩位流水號(hào)-SET CharTwoStuId = RTRIM(MaxStuID,7,2)-SELECT CharTwoStuID-最后兩位流水號(hào)轉(zhuǎn)換為數(shù)值型,然后加1,再轉(zhuǎn)換成字符型-SET IntTwoStuID = CONVERT(INT,CharTwoStuID)+1 -SELECT IntTwoStuID SET CharTwoStuID = CONVERT(CHAR
20、,IntTwoStuID)-SELECT CharTwoStuID-如果轉(zhuǎn)換成字符型的流水號(hào)是位,則在它前面添加字符0- IF LEN(CharTwoStuID) = 1 SET CharTwoStuID=0+CharTwoStuIDELSE-將班級(jí)編碼與獲取的新流水號(hào)相連接,得到新學(xué)號(hào)- SET NewStuID = ClassID+CharTwoStuID END【任務(wù)實(shí)施與拓展】8/7/202228江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-2 學(xué)號(hào)自動(dòng)遞增【任務(wù)實(shí)施與拓展】 (2)單擊【執(zhí)行】按鈕,即可在“教學(xué)管理系統(tǒng)”數(shù)據(jù)庫中創(chuàng)建相應(yīng)的存儲(chǔ)過程“AutoGetStuID”。 (3)繼續(xù)在【查詢】
21、窗口中輸入如下執(zhí)行存儲(chǔ)過程的T-SQL語句。 (4)單擊【執(zhí)行】按鈕,得到執(zhí)行存儲(chǔ)過程“AutoGetStuID”的返回結(jié)果,如圖所示。 DECLARE GetedStuID CHAR(8)EXEC AutoGetStuID 050801,GetedStuID OUTPUTSELECT GetedStuID AS NewStuID8/7/202229江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-3任務(wù)6-3 課程班成績的等第自動(dòng)劃分 8/7/202230江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-3 成績等第自動(dòng)劃分 課程班成績錄入系統(tǒng)后,由于系統(tǒng)記錄的是學(xué)生的分?jǐn)?shù),而有的課程班的成績需要用“優(yōu)秀、良好、中等、及格和不
22、及格”五個(gè)等第進(jìn)行顯示。等第劃分的標(biāo)準(zhǔn)是:90分以上為“優(yōu)秀”,80-89分為“良好”,70-79分為“中等”,60-69分為“及格”,60分以下為“不及格”。 請(qǐng)用帶參數(shù)的存儲(chǔ)過程實(shí)現(xiàn)不同課程班成績的等第自動(dòng)劃分功能?!救蝿?wù)描述與分析】8/7/202231江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-3 成績等第自動(dòng)劃分 CASE關(guān)鍵字可根據(jù)表達(dá)式的真假來確定是否返回某個(gè)值,可在允許使用表達(dá)式的任何地方使用它。 【相關(guān)知識(shí)與技能】 CASE分支語句 使用CASE語句可以進(jìn)行多個(gè)分支的選擇。CASE分支語句具有兩種格式:簡單格式和搜索格式。 簡單格式CASE語句 將某個(gè)表達(dá)式與一組簡單表達(dá)式進(jìn)行比較以確定結(jié)
23、果。語法格式如下: CASE 比較表達(dá)式 WHEN 簡單表達(dá)式1 THEN 結(jié)果表達(dá)式1 n ELSE 其它結(jié)果表達(dá)式END8/7/202232江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-3 成績等第自動(dòng)劃分【相關(guān)知識(shí)與技能】 搜索格式CASE語句 計(jì)算一組布爾表達(dá)式以確定結(jié)果。語法格式如下: CASEWHEN 布爾表達(dá)式1 THEN 結(jié)果表達(dá)式1 n ELSE 其它結(jié)果表達(dá)式END 上述語句中,當(dāng)某個(gè)“布爾表達(dá)式n”為“TRUE”時(shí),返回對(duì)應(yīng)的“結(jié)果表達(dá)式n”。當(dāng)所有“布爾表達(dá)式n”為“False”時(shí),返回“其它結(jié)果表單式”。8/7/202233江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-3 成績等第自動(dòng)劃分【任務(wù)
24、實(shí)施與拓展】USE DB_TeachingMSGOCREATE PROCEDURE GradeLevelSet CourseClassID CHAR(10) ASSELECT TG.StuID 學(xué)號(hào),StuName 姓名,TotalScore 分?jǐn)?shù),CASEWHEN TotalScore=60 AND TotalScore=70 AND TotalScore=80 AND TotalScore=90 AND TotalScore=100 THEN 優(yōu)秀END AS 等第FROM TB_Grade TG,TB_Student TSWHERE TG.StuID=TS.StuID AND Cours
25、eClassID=CourseClassIDORDER BY TotalScore DESC8/7/202234江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-3 成績等第自動(dòng)劃分【任務(wù)實(shí)施與拓展】 單擊【執(zhí)行】按鈕,即可在“教學(xué)管理系統(tǒng)”數(shù)據(jù)庫中創(chuàng)建相應(yīng)的存儲(chǔ)過程“GradeLevelSet”。 執(zhí)行存儲(chǔ)過程,以課程班“T080010401”為例。 EXEC GradeLevelSet CourseClassID=T080010401 單擊【執(zhí)行】按鈕,得到執(zhí)行存儲(chǔ)過程“GradeLevelSet”的返回結(jié)果,如圖所示。 8/7/202235江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-3 成績等第自動(dòng)劃分【任務(wù)實(shí)施與拓
26、展】8/7/202236江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-3 成績等第自動(dòng)劃分【任務(wù)實(shí)施與拓展】【 任務(wù)拓展 】 如果從表“TB_CourseClass”中查詢課程班信息時(shí),要將選滿標(biāo)志【FullFlag】字段中的值“U”和“F”分別顯示為“未滿”和“已滿”,則可以用下述簡單格式CASE語句實(shí)現(xiàn)。 USE DB_TeachingMSGOSELECT CourseClassID,CourseName,TeacherName,TeachingTime,TeachingPlace,CASE FullFlagWHEN U THEN 未滿WHEN F THEN 已滿END AS SelectFlagFRO
27、M TB_CourseClass TCC,TB_Course TC,TB_Teacher TTWHERE TCC.CourseID=TC.CourseID AND TCC.TeacherID=TT.TeacherID8/7/202237江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-3 成績等第自動(dòng)劃分【任務(wù)實(shí)施與拓展】執(zhí)行上述T-SQL語句,可以得到如圖6-5所示的查詢結(jié)果。 8/7/202238江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4任務(wù)6-4 學(xué)生課程選修和課程退選 8/7/202239江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選 在每個(gè)學(xué)期的期末或期初,教務(wù)處要開放一周時(shí)間給學(xué)生在網(wǎng)上完成課程選修,
28、在這一周內(nèi),學(xué)生可以根據(jù)自己的實(shí)際情況進(jìn)行課程選修和課程退選,在課程選修和退選的過程中,有的學(xué)生可能一次選修或退選多個(gè)課程班。當(dāng)學(xué)生登錄并進(jìn)入到選課界面,進(jìn)行課程選修或退選后,網(wǎng)頁應(yīng)用程序?qū)⒄{(diào)用數(shù)據(jù)庫中的存儲(chǔ)過程來完成相應(yīng)的課程選修和退選的功能,在調(diào)用存儲(chǔ)過程的同時(shí)傳遞兩個(gè)參數(shù):學(xué)號(hào)和選修或退選的課程班編碼字符串,多個(gè)課程班編碼用分號(hào)“,”隔開。 請(qǐng)用帶參數(shù)的存儲(chǔ)過程分別實(shí)現(xiàn)學(xué)生課程選修和退選功能。 【任務(wù)描述與分析】8/7/202240江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【相關(guān)知識(shí)與技能】 WHILE循環(huán)控制語句用以設(shè)置重復(fù)執(zhí)行T-SQL語句塊的條件。當(dāng)指定的條件為真時(shí),重復(fù)
29、執(zhí)行循環(huán)語句塊。語法結(jié)構(gòu)如下: 可以在循環(huán)體的SQL語句塊內(nèi)設(shè)置BREAK和CONTINUE關(guān)鍵字,以便控制循環(huán)語句的執(zhí)行流程。 WHILE循環(huán)控制語句WHILE 布爾條件表達(dá)式 循環(huán)SQL語句塊8/7/202241江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【相關(guān)知識(shí)與技能】 BREAK中斷語句 BREAK中斷語句用來退出WHILE或IFELSE語句的執(zhí)行,然后接著執(zhí)行WHILE或IFELSE語句后面的其它T-SQL語句。 注意:如果嵌套了兩個(gè)或多個(gè)WHILE循環(huán),內(nèi)層的BREAK語句將導(dǎo)致退出到下一個(gè)外層循環(huán)。首先運(yùn)行內(nèi)層循環(huán)結(jié)束之后的所有語句,然后下一個(gè)外層循環(huán)重新開始執(zhí)行。 C
30、ONTINUE語句用來重新開始一個(gè)新的WHILE循環(huán),循環(huán)體內(nèi)在CONTINUE關(guān)鍵字之后的任何語句都將被忽略。CONTINUE語句通常用一個(gè)IF條件語句來判斷是否執(zhí)行它。 CONTINUE語句8/7/202242江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【相關(guān)知識(shí)與技能】 WAITFOR延遲語句可以將它之后的語句在一個(gè)指定的時(shí)間間隔后執(zhí)行,或在將來的某一指定的具體時(shí)間執(zhí)行。 WAITFOR延遲語句WAITFOR DELAY 時(shí)間間隔 或WAITFOR TIME 具體時(shí)間點(diǎn) 上述語法結(jié)構(gòu)中的“時(shí)間間隔”為可以繼續(xù)執(zhí)行批處理、存儲(chǔ)過程或事務(wù)之前必須等待的指定時(shí)間間隔,最長可為24小時(shí)。
31、“具體時(shí)間點(diǎn)”為指定的運(yùn)行批處理、存儲(chǔ)過程或事務(wù)的時(shí)間點(diǎn)。 8/7/202243江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【相關(guān)知識(shí)與技能】 TRYCATCH語句對(duì)執(zhí)行的其它T-SQL語句實(shí)現(xiàn)與C#和C+語言中的異常處理類似的錯(cuò)誤處理。T-SQL 語句組可以包含在TRY塊中。如果TRY塊內(nèi)部發(fā)生錯(cuò)誤,則會(huì)將控制傳遞給CATCH塊中包含的另一個(gè)語句組。TRYCATCH構(gòu)造只捕獲嚴(yán)重級(jí)別大于10但不終止數(shù)據(jù)庫連接的錯(cuò)誤。 TRYCATCH語句 BEGIN TRYSQL語句塊END TRYBEGIN CATCHSQL語句塊END CATCH8/7/202244江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6
32、-4 學(xué)生課程選修退選【相關(guān)知識(shí)與技能】 TRY塊后必須緊跟相關(guān)聯(lián)的CATCH塊,在END TRY和BEGIN CATCH語句之間放置任何其他語句都將生成語法錯(cuò)誤。TRYCATCH構(gòu)造可以是嵌套式的。在CATCH塊的作用域內(nèi),可以使用如表所示的系統(tǒng)函數(shù)來獲取導(dǎo)致CATCH塊執(zhí)行的錯(cuò)誤消息。 函 數(shù)說 明ERROR_NUMBER()返回錯(cuò)誤號(hào)ERROR_SEVERITY()返回嚴(yán)重性ERROR_STATE()返回錯(cuò)誤狀態(tài)號(hào)ERROR_PROCEDURE()返回出現(xiàn)錯(cuò)誤的存儲(chǔ)過程或觸發(fā)器的名稱ERROR_LINE()返回導(dǎo)致錯(cuò)誤的例程中的行號(hào)ERROR_MESSAGE()返回錯(cuò)誤消息的完整文本。該
33、文本可包括任何可替換參數(shù)所提供的值,如長度、對(duì)象名或時(shí)間8/7/202245江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【相關(guān)知識(shí)與技能】 數(shù)據(jù)庫事務(wù)(Database Transaction)是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。通過將一組相關(guān)操作組合為一個(gè)要么全部成功要么全部失敗的單元,可以簡化錯(cuò)誤恢復(fù)并使應(yīng)用程序更加可靠。一個(gè)邏輯工作單元要成為事務(wù),必須滿足所謂的ACID屬性:原子性、一致性、隔離性和持久性。 數(shù)據(jù)庫事務(wù) 8/7/202246江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【相關(guān)知識(shí)與技能】 原子性(atomic) 事務(wù)必須是原子工作單元,對(duì)于其數(shù)據(jù)修改,
34、要么全都執(zhí)行,要么全都不執(zhí)行。 一致性(consistent) 事務(wù)在完成時(shí),必須使所有的數(shù)據(jù)都保持一致狀態(tài)。在相關(guān)數(shù)據(jù)庫中,所有規(guī)則都必須應(yīng)用于事務(wù)的修改,以保持所有數(shù)據(jù)的完整性。 隔離性(insulation) 由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離。事務(wù)查看數(shù)據(jù)時(shí)數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不會(huì)查看中間狀態(tài)的數(shù)據(jù)。 持久性(Duration) 事務(wù)完成之后,它對(duì)于系統(tǒng)的影響是永久性的。8/7/202247江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【相關(guān)知識(shí)與技能】 SQL Server用TRANSAC
35、TION關(guān)鍵字來實(shí)現(xiàn)對(duì)一個(gè)事務(wù)操作的提交或回滾。 BEGIN TRANSACTIONSQL語句塊COMMIT TRANSACTION 或 ROLLBACK TRANSACTION BEGIN TRANSACTION語句通知SQL SERVER,它應(yīng)該將下一條COMMIT TRANSACTION語句或ROLLBACK TRANSCATION語句以前的所有操作作為單個(gè)事務(wù)。如果SQL SERVER遇到的是一條COMMIT TRANSACTION語句,那么保存(提交)自最近一條BEGIN TRANSACTION語句以后對(duì)數(shù)據(jù)庫所做的所有工作。如果SQL SERVER遇到的是一條ROLLBACK TR
36、ANSACTION語句,則拋棄(回滾)所有這些操作所做的工作,恢復(fù)到數(shù)據(jù)的初始狀態(tài)。 8/7/202248江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】 課程選修USE DB_TeachingMSGOCREATE PROCEDURE SelectCourse StuID CHAR(8),CourseClassID CHAR(10) ASINSERT INTO TB_SelectCourse (StuID,CourseClassID)VALUES(StuID,CourseClassID) (1)如果每次只選擇一個(gè)課程班,創(chuàng)建“課程選修”存儲(chǔ)過程的T-SQL語句如下: 8/
37、7/202249江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】 (2)如果每次選擇的課程班不止一個(gè),多個(gè)課程班編碼間用“,”隔開,創(chuàng)建“課程選修”存儲(chǔ)過程的T-SQL語句如下: USE DB_TeachingMSGOCREATE PROCEDURE SelectCourse StuID CHAR(8),CourseClassIDs VARCHAR(100) AS-定義課程班編碼和字符位置變量,并初始化DECLARE CourseClassID CHAR(10),Position TINYINTSET Position=18/7/202250江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6
38、-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】WHILE PositionLEN(CourseClassIDs)BEGIN-取單個(gè)課程班的編碼SET CourseClassID=SUBSTRING(CourseClassIDs,Position,10)-將選擇的某個(gè)課程班插入選課信息表中INSERT INTO TB_SelectCourse (StuID,CourseClassID)VALUES(StuID,CourseClassID)-字符位置重新定位SET Position=Position+11END8/7/202251江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】 (
39、3)單擊【執(zhí)行】按鈕,即可在“教學(xué)管理系統(tǒng)”數(shù)據(jù)庫中創(chuàng)建相應(yīng)的存儲(chǔ)過程“SelectCourse”。 (4)繼續(xù)在【查詢】窗口中輸入如下執(zhí)行存儲(chǔ)過程的T-SQL語句。 EXEC SelectCourse 04020109,T080030401,T100020401,T100050401 (5)單擊【執(zhí)行】按鈕,將該學(xué)生所選擇的三個(gè)課程班記錄插入到選課信息表中。 8/7/202252江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】 課程退選 (1)如果每次退選的課程班個(gè)數(shù)也不確定,則多個(gè)課程班編碼間用“,”隔開,創(chuàng)建“課程退選”存儲(chǔ)過程的T-SQL語句如下: USE DB_
40、TeachingMSGOCREATE PROCEDURE ReturnCourse StuID CHAR(8),CourseClassIDs VARCHAR(100) AS-定義課程班編碼和字符位置變量,并初始化DECLARE CourseClassID CHAR(10),Position TINYINTSET Position=18/7/202253江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】WHILE PositionLEN(CourseClassIDs)BEGIN-取單個(gè)課程班的編碼SET CourseClassID=SUBSTRING(CourseClassI
41、Ds,Position,10)-將選擇的某個(gè)課程班插入選課信息表中DELETE FROM TB_SelectCourseWHERE StuID=StuID AND CourseClassID=CourseClassID-字符位置重新定位SET Position=Position+11END8/7/202254江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】 (3)單擊【執(zhí)行】按鈕,即可在“教學(xué)管理系統(tǒng)”數(shù)據(jù)庫中創(chuàng)建相應(yīng)的存儲(chǔ)過程“ReturnCourse ”。 (4)繼續(xù)在【查詢】窗口中輸入如下執(zhí)行存儲(chǔ)過程的T-SQL語句。 (5)單擊【執(zhí)行】按鈕,可以將選課信息表中該學(xué)
42、生選擇的三個(gè)課程班記錄刪除,達(dá)到課程退選的目的。 EXEC ReturnCourse 04020109,T080030401,T100020401,T1000504018/7/202255江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選WAITFOR TIME 11:40PRINT 下課時(shí)間到了!【任務(wù)實(shí)施與拓展】【 任務(wù)拓展 】 如果要在中午11:40要提醒:“下課時(shí)間到了!”這樣的信息。可以執(zhí)行下述T-SQL語句來實(shí)現(xiàn)。 1. WAITFOR語句 同樣,如果要在1分鐘后要提醒:“1分鐘時(shí)間到了!”這樣的信息??梢詧?zhí)行下述T-SQL語句來實(shí)現(xiàn)。 WAITFOR DELAY 00:01PR
43、INT 1分鐘時(shí)間到了!8/7/202256江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】 用存儲(chǔ)過程向“教學(xué)管理系統(tǒng)”數(shù)據(jù)庫中的表“TB_Class”中插入班級(jí)記錄,記錄插入的過程中可能會(huì)產(chǎn)生各種錯(cuò)誤,如何捕捉到這個(gè)錯(cuò)誤,可在存儲(chǔ)過程中用下述T-SQL語句實(shí)現(xiàn): 2. TRYCATCH語句 8/7/202257江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】USE DB_TeachingMSGOCREATE PROCEDURE InsertClass ClassID CHAR(6),ClassName CHAR(20),DeptID CHAR(2
44、),TeacherID CHAR(6),ErrorMsg VARCHAR(256) OUTPUT AS BEGIN TRY INSERT INTO TB_Class VALUES(ClassID,ClassName,DeptID,TeacherID) END TRY BEGIN CATCH SET ErrorMsg=ERROR_MESSAGE() END CATCH8/7/202258江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】 用此存儲(chǔ)過程插入如下表所示的三條記錄,分別觀察返回的錯(cuò)誤信息。 執(zhí)行存儲(chǔ)過程“InsertClass”,插入表6-6中第一條記錄時(shí),T-SQ
45、L語句如下: 編碼班級(jí)名稱系部編碼班主任05086505動(dòng)漫(2)班08T0800304080104網(wǎng)絡(luò)(1)班08T0800105086605動(dòng)漫(3)班08T08099DECLARE ErrorMsg VARCHAR(256)EXEC InsertClass 050865,05動(dòng)漫(2)班,08,T08003, ErrorMsg OUTPUTSELECT ErrorMsg AS 錯(cuò)誤信息 返回的錯(cuò)誤信息為“NULL”,記錄成功插入表“TB_Class”中。 8/7/202259江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】 同樣,用這個(gè)存儲(chǔ)過程插入表6-6中的第二條
46、記錄,產(chǎn)生的錯(cuò)誤信息如下圖所示。 再用這個(gè)存儲(chǔ)過程插入表6-6中的第三條記錄,產(chǎn)生的錯(cuò)誤信息如下圖所示。 8/7/202260江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】 如果要一次性連續(xù)插入前面表中的三條記錄可以用下述T-SQL語句實(shí)現(xiàn) :2. 數(shù)據(jù)庫事務(wù) USE DB_TeachingMSGO INSERT INTO TB_Class VALUES(050865,05動(dòng)漫(2)班,08,T08003) INSERT INTO TB_Class VALUES(040801,04網(wǎng)絡(luò)(1)班,08,T08001) INSERT INTO TB_Class VALUES
47、(050866,05動(dòng)漫(3)班,08,T08099) 執(zhí)行上述語句,會(huì)插入第一條記錄,后兩條記錄分別由于主鍵約束和外鍵約束錯(cuò)誤而插入失敗。如果要將這三條記錄作為一個(gè)事務(wù)單元來執(zhí)行,要么全部插入成功,要么全部插入失敗,即滿足事務(wù)操作的原子性??捎孟率鯰-SQL語句來實(shí)現(xiàn): 8/7/202261江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-4 學(xué)生課程選修退選【任務(wù)實(shí)施與拓展】 USE DB_TeachingMS GO DECLARE FirstError INT,SecondError INT,ThirdError INT BEGIN TRANSACTION INSERT INTO TB_Class VAL
48、UES(050865,05動(dòng)漫(2)班,08,T08003) SET FirstError=ERROR INSERT INTO TB_Class VALUES(040801,04網(wǎng)絡(luò)(1)班,08,T08001) SET SecondError=ERROR INSERT INTO TB_Class VALUES(050866,05動(dòng)漫(3)班,08,T08099) SET ThirdError=ERROR IF FirstError=0 AND SecondError=0 AND ThirdError=0 COMMIT TRANSACTION ELSE ROLLBACK TRANSACTION
49、8/7/202262江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-5任務(wù)6-5 課程班成績查詢功能實(shí)現(xiàn) 8/7/202263江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-5 課程班成績查詢 學(xué)期結(jié)束后,任課老師將課程班成績錄入到“教學(xué)管理系統(tǒng)”中后,教務(wù)處要經(jīng)常查詢不同教師所任教課程班的學(xué)生成績。第一項(xiàng)目小組要求曾丹丹同學(xué)基于ASP.NET技術(shù)創(chuàng)建一個(gè)基于課程班的學(xué)生成績查詢的應(yīng)用程序,并通過調(diào)用“教學(xué)管理數(shù)據(jù)庫”中的存儲(chǔ)過程來完成教師查詢自己教學(xué)的課程班的學(xué)生成績的功能。 【任務(wù)描述與分析】8/7/202264江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系(1)課程班成績查詢界面任務(wù)6-5 課程班成績查詢【任務(wù)實(shí)施與拓展】8/7/20226
50、5江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系 按照原型設(shè)計(jì)進(jìn)行相應(yīng)的網(wǎng)頁框架設(shè)計(jì)任務(wù)6-5 課程班成績查詢【任務(wù)實(shí)施與拓展】8/7/202266江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-5 課程班成績查詢【任務(wù)實(shí)施與拓展】1. 在站點(diǎn)【http:/localhost/ManageModel_Web】中添加一個(gè)新的網(wǎng)頁應(yīng)用程序“TeacherGradeQuery.aspx”文件,設(shè)計(jì)界面如圖所示。 8/7/202267江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-5 課程班成績查詢【任務(wù)實(shí)施與拓展】2. 設(shè)置上圖中的GridView組件的【自動(dòng)套用格式】為【雨天】格式。3. 在下圖所示【字段】對(duì)話框的【可用字段】欄內(nèi)選擇【BoundFi
51、eld】項(xiàng),單擊【添加】按鈕,添加六個(gè)“BoundField”類型字段。它們的【DataField】和【HeaderText】屬性分別為“StuID、StuName、CommonScore、MiddleScore、LastScore、TotalScore”和“學(xué)號(hào)、姓名、平時(shí)成績、期中成績、期末成績、總評(píng)成績”。 8/7/202268江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-5 課程班成績查詢【任務(wù)實(shí)施與拓展】8/7/202269江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系 頁面中的各個(gè)組件的屬性設(shè)置情況如下表所示 任務(wù)6-5 課程班成績查詢【任務(wù)實(shí)施與拓展】組件ID組件類型說 明TeacherDDListDropDown
52、ListWidth屬性:120px,AutoPostBack屬性:“True”CourseClassDDListDropDownListWidth屬性:300pxQueryBtnButtonWidth屬性:80px,Text屬性:“確定”GradeGViewGridViewWidth屬性:150px,AutoGenerateColumns屬性:“False”8/7/202270江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系網(wǎng)頁功能實(shí)現(xiàn)代碼(CourseClassGradeQuery.aspx.cs) 課程班成績查詢功能實(shí)現(xiàn) 1.創(chuàng)建課程班查詢的存儲(chǔ)過程 2.教師下拉列表框數(shù)據(jù)綁定 3.課程班下拉框與教師下拉框聯(lián)動(dòng)
53、4.課程班成績查詢并綁定 任務(wù)6-5 課程班成績查詢【任務(wù)實(shí)施與拓展】8/7/202271江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-5 課程班成績查詢1、創(chuàng)建課程班查詢的存儲(chǔ)過程【任務(wù)實(shí)施與拓展】USE DB_TeachingMSGOCREATE PROCEDURE SP_CourseClassQuery TeacherID CHAR(6)AS SELECT CourseClassID,CourseName+|+TeachingTime+|+TeachingPlace AS CCName FROM TB_CourseClass TCC,TB_Course TC WHERE TCC.CourseID=TC
54、.CourseID AND TeacherID=TeacherID 首先在SQL Server的SSMS中創(chuàng)建一個(gè)名為“SP_CourseClassQuery”的存儲(chǔ)過程,用于查詢某個(gè)教師的任教課程班的信息。存儲(chǔ)過程創(chuàng)建T-SQL語句如下:8/7/202272江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-5 課程班成績查詢2、教師下拉列表框數(shù)據(jù)綁定【任務(wù)實(shí)施與拓展】 在文件“CourseClassGradeQuery.aspx.cs”的頭部添加代碼“using System.Data.SqlClient;”。 為實(shí)現(xiàn)【教師】下拉框數(shù)據(jù)綁定功能,在“CourseClassGradeQuery.aspx.cs”
55、文件中添加一個(gè)私有的方法“DropDownListBind()”,代碼如下: private void DropDownListBind() /新建一個(gè)連接實(shí)例 SqlConnection DDLConn = new SqlConnection(); /從Web.config文件獲取數(shù)據(jù)庫連接字符串 DDLConn.ConnectionString = ConfigurationManager.ConnectionStringsConnStr.ToString(); DDLConn.Open();8/7/202273江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-5 課程班成績查詢【任務(wù)實(shí)施與拓展】 /將教師
56、表中的數(shù)據(jù)填充到DDLDataSet對(duì)象的表“TeacherTable”中 SqlCommand TeacherCmd = new SqlCommand(SELECT TeacherID,TeacherName FROM TB_Teacher, DDLConn); SqlDataAdapter TeacherDataAdapter = new SqlDataAdapter(TeacherCmd); DataSet DDLDataSet = new DataSet(); TeacherDataAdapter.Fill(DDLDataSet,TeacherTable); /教師下拉框綁定 this
57、.TeacherDDList.DataTextField = TeacherName; this.TeacherDDList.DataValueField = TeacherID; this.TeacherDDList.DataSource = DDLDataSet.TablesTeacherTable; this.TeacherDDList.DataBind(); this.TeacherDDList.Items.Insert(0, new ListItem(=所有教師=, 全部); /關(guān)閉數(shù)據(jù)庫連接 DDLConn.Close();8/7/202274江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-5 課
58、程班成績查詢【任務(wù)實(shí)施與拓展】 在“CourseClassGradeQuery.aspx.cs”文件的方法“Page_Load()”中輸入下列代碼,即可實(shí)現(xiàn)【教師】下拉框的數(shù)據(jù)綁定功能。 /如果是第一次加載網(wǎng)頁,則綁定頁面上各個(gè)下拉框的數(shù)據(jù) if (!Page.IsPostBack) DropDownListBind();8/7/202275江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-5 課程班成績查詢3、課程班下拉框與教師下拉框聯(lián)動(dòng) 【任務(wù)實(shí)施與拓展】 為了實(shí)現(xiàn)當(dāng)選擇了【教師】下拉框中的某個(gè)教師后,【課程班】下拉框中就顯示對(duì)應(yīng)教師的任教課程班信息記錄的功能,在【TeacherDDList】組件的【Sel
59、ectedIndexChanged】事件的右側(cè)空白處雙擊,在方法“TeacherDDList_SelectedIndexChanged()”中添加下述代碼:protected void TeacherDDList_SelectedIndexChanged(object sender, EventArgs e) /新建一個(gè)連接實(shí)例 SqlConnection CourseClassConn = new SqlConnection(); /從Web.config文件獲取數(shù)據(jù)庫連接字符串 CourseClassConn.ConnectionString = ConfigurationManager.
60、ConnectionStringsConnStr.ToString(); CourseClassConn.Open();8/7/202276江陰職業(yè)技術(shù)學(xué)院計(jì)算機(jī)系任務(wù)6-5 課程班成績查詢【任務(wù)實(shí)施與拓展】 /調(diào)用存儲(chǔ)過程“SP_CourseClassQuery”SqlCommand CourseClassCmd = new SqlCommand(SP_CourseClassQuery,CourseClassConn); /說明SqlCommand類型是個(gè)存儲(chǔ)過程 CourseClassCmd.CommandType = CommandType.StoredProcedure; /添加存儲(chǔ)過
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)場農(nóng)田發(fā)包工作方案模版(3篇)
- 2025年外科護(hù)士工作計(jì)劃例文(2篇)
- 2025年食品質(zhì)檢員崗位職責(zé)(2篇)
- 信息技術(shù)部主管的安全生產(chǎn)職責(zé)模版(3篇)
- 2025年住院醫(yī)師年度工作總結(jié)范文(2篇)
- 2025年業(yè)務(wù)助理工作總結(jié)經(jīng)典版(3篇)
- 2025年消防應(yīng)急演練計(jì)劃(5篇)
- 項(xiàng)目安保科安全生產(chǎn)工作職責(zé)模版(2篇)
- 凈化工段安全技術(shù)操作規(guī)程范文(2篇)
- 崗位安全生產(chǎn)責(zé)任制模版(3篇)
- 中小學(xué)數(shù)學(xué)學(xué)科德育實(shí)施指導(dǎo)綱要
- 并聯(lián)無功補(bǔ)償項(xiàng)目節(jié)約電量的計(jì)算中國電力企業(yè)聯(lián)合會(huì)
- 《病毒》教學(xué)設(shè)計(jì)
- 路面基層允許彎沉值計(jì)算+彎沉系數(shù)圖+允許彎沉值計(jì)算公式
- 連鑄意外事故處理
- 國家開放大學(xué)(中央廣播電視大學(xué))報(bào)名登記表【模板】
- 新職業(yè)英語1-基礎(chǔ)篇-Unit 3(課堂PPT)
- 公司各部門協(xié)作情況互評(píng)表滿意度調(diào)查表
- 第二章水準(zhǔn)測(cè)量PPT課件
- 長輸管道原油輸送基本知識(shí)
- 完美世界的材料
評(píng)論
0/150
提交評(píng)論