




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制1單元單元7用用T-SQL增加測(cè)試數(shù)據(jù)增加測(cè)試數(shù)據(jù)和事務(wù)控制和事務(wù)控制單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制回顧回顧 在班級(jí)表中刪除在班級(jí)表中刪除1號(hào)班級(jí),報(bào)錯(cuò)如圖,請(qǐng)問原因是什么?號(hào)班級(jí),報(bào)錯(cuò)如圖,請(qǐng)問原因是什么?創(chuàng)建外鍵約束的語法?創(chuàng)建外鍵約束的語法?請(qǐng)列出請(qǐng)列出ComboBox的常用屬性的常用屬性使用使用DataGridView進(jìn)行篩選使用其什么屬性?進(jìn)行篩選使用其什么屬性?如何使用如何使用DataRelation實(shí)現(xiàn)主從表的關(guān)聯(lián)?實(shí)現(xiàn)主從表的關(guān)聯(lián)?單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制本單元任務(wù)本單元任務(wù) 任務(wù)一任務(wù)一 為學(xué)生表插入十萬行數(shù)據(jù)
2、為學(xué)生表插入十萬行數(shù)據(jù)任務(wù)二任務(wù)二 完成完成“轉(zhuǎn)專業(yè)轉(zhuǎn)專業(yè)”模塊模塊單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制本單元目標(biāo)本單元目標(biāo)掌握如何定義變量并賦值掌握如何定義變量并賦值掌握如何輸出數(shù)據(jù)掌握如何輸出數(shù)據(jù)掌握邏輯控制語句掌握邏輯控制語句理解批處理的概念理解批處理的概念理解事務(wù)的概念理解事務(wù)的概念掌握掌握ADO.NET中控制事務(wù)的方法中控制事務(wù)的方法單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制任務(wù)一為學(xué)生表插入十萬行數(shù)據(jù)任務(wù)一為學(xué)生表插入十萬行數(shù)據(jù) 任務(wù)描述:任務(wù)描述:任務(wù)分析:任務(wù)分析:為了進(jìn)行系統(tǒng)的壓力測(cè)試,為學(xué)生表添加十萬行數(shù)據(jù)為了進(jìn)行系統(tǒng)的壓力測(cè)試,為學(xué)生表添加十萬行數(shù)據(jù) 。 1使用使用IN
3、SERT語句可為學(xué)生表添加一行數(shù)據(jù)。語句可為學(xué)生表添加一行數(shù)據(jù)。2使用循環(huán)控制可添加使用循環(huán)控制可添加n。3如果十萬行數(shù)據(jù)都一樣,則意思不大。因此,要使用隨機(jī)數(shù),產(chǎn)生不同如果十萬行數(shù)據(jù)都一樣,則意思不大。因此,要使用隨機(jī)數(shù),產(chǎn)生不同的數(shù)據(jù)。的數(shù)據(jù)。4考慮系統(tǒng)性能,應(yīng)每考慮系統(tǒng)性能,應(yīng)每100行提交一次。行提交一次。單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制使用變量使用變量 變量分為:變量分為:局部變量:局部變量:局部變量必須以標(biāo)記局部變量必須以標(biāo)記作為前綴作為前綴 ,如,如age局部變量的使用也是先聲明,再賦值局部變量的使用也是先聲明,再賦值 全局變量:全局變量:全局變量必須以標(biāo)記全局變量必須以
4、標(biāo)記 作為前綴,如作為前綴,如version全局變量由系統(tǒng)定義和維護(hù),我們只能讀取,不能修改全局變?nèi)肿兞坑上到y(tǒng)定義和維護(hù),我們只能讀取,不能修改全局變量的值量的值 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制局部變量局部變量 例如:例如:DECLARE name varchar(8)DECLARE seat int聲明局部變量聲明局部變量 DECLARE 變量名變量名 數(shù)據(jù)類型數(shù)據(jù)類型賦值賦值 SET 變量名變量名 =值值 SELECT 變量名變量名 = 值值例如:例如:SET name=張三張三SELECT name=studentName FROM student WHERE student
5、No=2003010101 必須確保篩選出的記錄只有必須確保篩選出的記錄只有1條條 或 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制局部變量示例局部變量示例分析:分析:(1)查找張亮同學(xué)的班級(jí)號(hào))查找張亮同學(xué)的班級(jí)號(hào)(2)查找班級(jí)號(hào)是()查找班級(jí)號(hào)是(1)結(jié)果的學(xué)生信)結(jié)果的學(xué)生信 【例【例7-1】查找與張亮同班的學(xué)生信息】查找與張亮同班的學(xué)生信息-聲明存放學(xué)生姓名的變量,最多可存貯聲明存放學(xué)生姓名的變量,最多可存貯10個(gè)字符個(gè)字符DECLARE name varchar(10)-聲明存放班級(jí)號(hào)聲明存放班級(jí)號(hào)DECLARE classID intSet name = 張亮張亮Select clas
6、sID = classID From Student Where StudentName = nameSelect * from Student Where ClassID = classID單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制全局變量全局變量 全局變量都使用兩個(gè)全局變量都使用兩個(gè)標(biāo)志作為前綴標(biāo)志作為前綴 變量變量含義含義ERROR最后一個(gè)最后一個(gè)T-SQL錯(cuò)誤的錯(cuò)誤號(hào)錯(cuò)誤的錯(cuò)誤號(hào)IDENTITY最后一次插入的標(biāo)識(shí)值最后一次插入的標(biāo)識(shí)值LANGUAGE當(dāng)前使用的語言的名稱當(dāng)前使用的語言的名稱MAX_CONNECTIONS可以創(chuàng)建的同時(shí)連接的最大數(shù)目可以創(chuàng)建的同時(shí)連接的最大數(shù)目ROWCOUN
7、T受上一個(gè)受上一個(gè)SQL語句影響的行數(shù)語句影響的行數(shù)SERVERNAME本地服務(wù)器的名稱本地服務(wù)器的名稱TRANSCOUNT當(dāng)前連接打開的事務(wù)數(shù)當(dāng)前連接打開的事務(wù)數(shù)VERSIONSQL Server的版本信息的版本信息單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制print SQL Server的版本的版本+VERSION print 服務(wù)器的名稱服務(wù)器的名稱: +SERVERNAME INSERT INTO student(studentName,studentNo) VALUES(武松武松,s25328)-如果大于如果大于0表示上一條語句執(zhí)行有錯(cuò)誤表示上一條語句執(zhí)行有錯(cuò)誤print 當(dāng)前錯(cuò)誤號(hào)當(dāng)
8、前錯(cuò)誤號(hào)+convert(varchar(5),ERROR) print 剛才報(bào)名的學(xué)員,座位號(hào)為剛才報(bào)名的學(xué)員,座位號(hào)為: +convert(varchar(5),IDENTITY )UPDATE student SET LoginPWD=aaa WHERE studentName=武松武松print 當(dāng)前錯(cuò)誤號(hào)當(dāng)前錯(cuò)誤號(hào)+convert(varchar(5),ERROR) GO輸出語句輸出語句 print演示:使用全局變量演示:使用全局變量 參考語句參考語句SQL Server的版本的版本 服務(wù)器名稱服務(wù)器名稱 錯(cuò)誤號(hào)錯(cuò)誤號(hào) 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制邏輯控制語句邏輯控制語句
9、IFELSE語句語句SQL中的中的IF-ELSE語句語句IF (條件)(條件) BEGIN 語句語句1 語句語句2 ENDELSE BEGIN 語句語句1; 語句語句2; ENDlELSE是可選部分是可選部分l如果有多條語句,才需要如果有多條語句,才需要BEGIN-END語句塊語句塊 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制IF-ELSE示例示例分析:分析:(1)統(tǒng)計(jì)平均成績存)統(tǒng)計(jì)平均成績存入臨時(shí)變量。入臨時(shí)變量。(2)用)用IFELSE判判斷。斷。 【例【例7-3】統(tǒng)計(jì)并顯示課程號(hào)為】統(tǒng)計(jì)并顯示課程號(hào)為1的期末成績平均分,如果平均分的期末成績平均分,如果平均分在在80以上,顯示以上,顯示“
10、成績優(yōu)秀成績優(yōu)秀”,并查詢成績前,并查詢成績前3名學(xué)生的學(xué)號(hào);如果名學(xué)生的學(xué)號(hào);如果在在80以下,顯示以下,顯示“成績一般成績一般”,并查詢成績后,并查詢成績后3名學(xué)生的學(xué)號(hào)名學(xué)生的學(xué)號(hào) declare avg floatselect avg=avg(score1)from scorewhere subjectID=1if (avg = 80) begin print 成績優(yōu)秀成績優(yōu)秀 select top 3 studentno from score where subjectID=1 order by score1 desc endelse begin print 成績一般成績一般 sel
11、ect top 3 studentno from score where subjectID=1 order by score1 end單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制邏輯控制語句邏輯控制語句CASEEND多分支語句多分支語句CASE WHEN 條件條件1 THEN 結(jié)果結(jié)果1 WHEN 條件條件2 THEN 結(jié)果結(jié)果2 ELSE 其他結(jié)果其他結(jié)果ENDCASE 輸入值輸入值 WHEN 值值1 THEN 結(jié)果結(jié)果1 WHEN 值值2 THEN 結(jié)果結(jié)果2 ELSE 其他結(jié)果其他結(jié)果END單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制CASE示例示例 【例【例7-4】學(xué)生的性別:】學(xué)生的性別:
12、0為男生,為男生,1為女生,要求查詢每為女生,要求查詢每位學(xué)生的學(xué)號(hào)和性別位學(xué)生的學(xué)號(hào)和性別 Select StudentNo, 性別性別 = CASE SEX WHEN 0 THEN 男生男生 WHEN 1 THEN 女生女生 ENDFROM Student單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制邏輯控制語句邏輯控制語句WHILE循環(huán)語句循環(huán)語句SQL中的中的WHILE語句語句WHILE (條件)(條件) BEGIN 語句語句1 語句語句2 BREAK ENDBREAK表示退出循環(huán)表示退出循環(huán)如果有多條語句,才需要如果有多條語句,才需要BEGIN-END語句塊語句塊 單元07用tsql增加測(cè)
13、試數(shù)據(jù)和事務(wù)控制WHILE示例示例 【例【例7-5】求】求10的階乘的階乘 DECLARE Result integer, i integerSELECT Result=1, i=10WHILE i0 BEGIN SET Result=Result*i SET i=i-1 ENDPRINT Result 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制批處理語句批處理語句批處理是包含一個(gè)或多個(gè)批處理是包含一個(gè)或多個(gè) SQL 語句的組,從應(yīng)用程序一語句的組,從應(yīng)用程序一次性地發(fā)送到次性地發(fā)送到SQL Server執(zhí)行執(zhí)行SQL Server 將批處理語句編譯成一個(gè)可執(zhí)行單元,此單將批處理語句編譯成一個(gè)可
14、執(zhí)行單元,此單元稱為執(zhí)行計(jì)劃。執(zhí)行計(jì)劃中的語句每次執(zhí)行一條元稱為執(zhí)行計(jì)劃。執(zhí)行計(jì)劃中的語句每次執(zhí)行一條客戶端應(yīng)用程序客戶端應(yīng)用程序SQL Server服務(wù)器服務(wù)器批處理語句:批處理語句:語句語句1語句語句2GO單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制批處理語句示例批處理語句示例SELECT * FROM studentSELECT * FROM scoreUPDATE score SET score3=score1*0.6+score2*0.4 GOlGO是批處理的標(biāo)志,表示是批處理的標(biāo)志,表示SQL Server將這些將這些T-SQL語句編譯為一個(gè)執(zhí)行語句編譯為一個(gè)執(zhí)行單元,提高執(zhí)行效率單元
15、,提高執(zhí)行效率l一般是將一些邏輯相關(guān)的業(yè)務(wù)操作語句,放置在同一批中,這完全由業(yè)務(wù)一般是將一些邏輯相關(guān)的業(yè)務(wù)操作語句,放置在同一批中,這完全由業(yè)務(wù)需求和代碼編寫者決定需求和代碼編寫者決定 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制批處理語句示例批處理語句示例-例如建表語句的末尾必須添加例如建表語句的末尾必須添加GOCREATE TABLE stuInfo (.) GOSQLServer規(guī)定:如果是建庫、建表語句、以及我們后規(guī)定:如果是建庫、建表語句、以及我們后面學(xué)習(xí)的存儲(chǔ)過程和視圖等,則必須在語句末尾添加面學(xué)習(xí)的存儲(chǔ)過程和視圖等,則必須在語句末尾添加 GO 批處理標(biāo)志批處理標(biāo)志單元07用tsql增
16、加測(cè)試數(shù)據(jù)和事務(wù)控制隨機(jī)函數(shù)隨機(jī)函數(shù) RAND ( ):隨機(jī)函數(shù),返回從:隨機(jī)函數(shù),返回從0 到到1之間的隨機(jī)之間的隨機(jī)float值。值。NEWID ( ):創(chuàng)建一個(gè):創(chuàng)建一個(gè)uniqueidentifier類型的唯一值類型的唯一值select rand()*100 產(chǎn)生產(chǎn)生0-1000-100內(nèi)的隨機(jī)數(shù)內(nèi)的隨機(jī)數(shù)select Left(convert(varchar(40),newid(),10) 產(chǎn)生產(chǎn)生1010位隨機(jī)字符串位隨機(jī)字符串 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制事務(wù)事務(wù)賬戶賬戶A賬戶賬戶B事務(wù)是一個(gè)工作單元,是一種要么成功,要么失敗的操作。事務(wù)是一個(gè)工作單元,是一種要么成功
17、,要么失敗的操作。 例如,銀行轉(zhuǎn)賬問題:例如,銀行轉(zhuǎn)賬問題: 假定資金從賬戶假定資金從賬戶A轉(zhuǎn)到賬戶轉(zhuǎn)到賬戶B,至少需要兩步:,至少需要兩步:賬戶賬戶A的資金減少的資金減少然后賬戶然后賬戶B的資金相應(yīng)增加的資金相應(yīng)增加 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制假定張三的賬戶直接轉(zhuǎn)賬假定張三的賬戶直接轉(zhuǎn)賬1000元到李四的賬戶元到李四的賬戶為什么需要事務(wù)為什么需要事務(wù)CREATE TABLE bank( customerName CHAR(10), -顧客姓名顧客姓名 currentMoney MONEY -當(dāng)前余額當(dāng)前余額)GOALTER TABLE bank ADD CONSTRAINT C
18、K_currentMoney CHECK(currentMoney=1)GOINSERT INTO bank(customerName,currentMoney) VALUES(張三張三,1000)INSERT INTO bank(customerName,currentMoney) VALUES(李四李四,1)創(chuàng)建賬戶表,存放用戶的賬戶信息創(chuàng)建賬戶表,存放用戶的賬戶信息添加約束:根據(jù)銀行規(guī)定,賬戶添加約束:根據(jù)銀行規(guī)定,賬戶余額不能少于余額不能少于1元,否則視為銷元,否則視為銷戶戶 張三開戶,開戶金額為張三開戶,開戶金額為1000元元 ;李四開戶,開戶金額;李四開戶,開戶金額1元元 單元07
19、用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制為什么需要事務(wù)為什么需要事務(wù)目前兩個(gè)賬戶的余額總和為:目前兩個(gè)賬戶的余額總和為:1000+1=1001元元 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制為什么需要事務(wù)為什么需要事務(wù)模擬實(shí)現(xiàn)轉(zhuǎn)賬模擬實(shí)現(xiàn)轉(zhuǎn)賬 : 從張三的賬戶轉(zhuǎn)賬從張三的賬戶轉(zhuǎn)賬1000元到李四的賬戶元到李四的賬戶/*-轉(zhuǎn)賬測(cè)試:張三轉(zhuǎn)賬轉(zhuǎn)賬測(cè)試:張三轉(zhuǎn)賬1000元給李四元給李四-*/-我們可能會(huì)這樣這樣編寫語句我們可能會(huì)這樣這樣編寫語句-張三的賬戶少張三的賬戶少1000元,李四的賬戶多元,李四的賬戶多1000元元UPDATE bank SET currentMoney=currentMoney-100
20、0 WHERE customerName=張三張三UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四李四GO-再次查看轉(zhuǎn)賬后的結(jié)果。再次查看轉(zhuǎn)賬后的結(jié)果。 SELECT * FROM bankGO請(qǐng)問:請(qǐng)問:執(zhí)行轉(zhuǎn)賬語句后,張三、李四的賬戶執(zhí)行轉(zhuǎn)賬語句后,張三、李四的賬戶余額為多少?余額為多少?張三的賬戶沒有減少張三的賬戶沒有減少 但李四的賬戶卻多了但李四的賬戶卻多了1000元元 100010012001元元 總額多出了總額多出了1000元!元!單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制為什么需要事務(wù)為什么需要
21、事務(wù)-張三的賬戶減少張三的賬戶減少1000元,李四的賬戶增加元,李四的賬戶增加1000元元UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=張三張三UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四李四GO錯(cuò)誤原因分析:錯(cuò)誤原因分析:執(zhí)行失敗,所以張三還是執(zhí)行失敗,所以張三還是1000元元繼續(xù)往下執(zhí)行:執(zhí)行成功,所以李四變?yōu)槔^續(xù)往下執(zhí)行:執(zhí)行成功,所以李四變?yōu)?001元元如何解決呢?使用如何解決呢?使用事務(wù)事務(wù)UPDATE語句違
22、反約束:語句違反約束:余額余額=1元元單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制什么是事務(wù)什么是事務(wù)事務(wù)是作為邏輯工作單元執(zhí)行的一系列操作。它包含了一組事務(wù)是作為邏輯工作單元執(zhí)行的一系列操作。它包含了一組SQL語句,語句,但整組但整組SQL作為一個(gè)整體向系統(tǒng)提交或撤銷。對(duì)于大型的數(shù)據(jù)庫應(yīng)用作為一個(gè)整體向系統(tǒng)提交或撤銷。對(duì)于大型的數(shù)據(jù)庫應(yīng)用系統(tǒng),如訂票系統(tǒng)、銀行系統(tǒng)等特別適合。系統(tǒng),如訂票系統(tǒng)、銀行系統(tǒng)等特別適合。事務(wù)有四個(gè)屬性,稱為事務(wù)有四個(gè)屬性,稱為 ACID(原子性、一致性、隔離性和持久性)屬性,(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成為一個(gè)事務(wù)。只有這樣才能成為一個(gè)事務(wù)。轉(zhuǎn)賬
23、過程就是一個(gè)事務(wù)。轉(zhuǎn)賬過程就是一個(gè)事務(wù)。它需要兩條它需要兩條UPDATE語句來完成,這兩條語句是一個(gè)整體,如果其中任一條出語句來完成,這兩條語句是一個(gè)整體,如果其中任一條出現(xiàn)錯(cuò)誤,則整個(gè)轉(zhuǎn)賬業(yè)務(wù)也應(yīng)取消,兩個(gè)賬戶中的余額應(yīng)恢復(fù)到原來的數(shù)據(jù),現(xiàn)錯(cuò)誤,則整個(gè)轉(zhuǎn)賬業(yè)務(wù)也應(yīng)取消,兩個(gè)賬戶中的余額應(yīng)恢復(fù)到原來的數(shù)據(jù),從而確保轉(zhuǎn)賬前和轉(zhuǎn)賬后的余額不變,即都是從而確保轉(zhuǎn)賬前和轉(zhuǎn)賬后的余額不變,即都是1001元。元。單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制創(chuàng)建事務(wù)創(chuàng)建事務(wù)T-SQL管理事務(wù)的語句有:管理事務(wù)的語句有:BEGIN TRANSAVTION:開始事務(wù)。開始事務(wù)。COMMIT TRANSACTION:
24、提交事務(wù)。提交事務(wù)。ROLLBACK TRANSACTION:回滾事務(wù)。回滾事務(wù)。事務(wù)的分類有:事務(wù)的分類有:顯式事務(wù):通過發(fā)出顯式事務(wù):通過發(fā)出BEGIN TRANSACTION語句顯式啟動(dòng)事務(wù)。語句顯式啟動(dòng)事務(wù)。自動(dòng)提交事務(wù):自動(dòng)提交事務(wù):SQL Server的默認(rèn)模式。每個(gè)單獨(dú)的的默認(rèn)模式。每個(gè)單獨(dú)的T-SQL語句作為一語句作為一個(gè)事務(wù),成功后提交,錯(cuò)誤則自動(dòng)回滾。個(gè)事務(wù),成功后提交,錯(cuò)誤則自動(dòng)回滾。隱性事務(wù):通過設(shè)置隱性事務(wù):通過設(shè)置SET IMPLICIT_TRANSACTIONS ON語句,將隱語句,將隱性事務(wù)模式設(shè)置為打開。在隱性事務(wù)操作時(shí),提交或回滾事務(wù)后自動(dòng)啟性事務(wù)模式設(shè)置為
25、打開。在隱性事務(wù)操作時(shí),提交或回滾事務(wù)后自動(dòng)啟動(dòng)一個(gè)新事務(wù)。動(dòng)一個(gè)新事務(wù)。單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制解決銀行轉(zhuǎn)賬問題解決銀行轉(zhuǎn)賬問題BEGIN TRANSACTION DECLARE errorSum INT -用于累計(jì)事務(wù)執(zhí)行過程中的錯(cuò)誤用于累計(jì)事務(wù)執(zhí)行過程中的錯(cuò)誤-*/SET errorSum=0 -初始化為初始化為0,即無錯(cuò)誤,即無錯(cuò)誤/*-轉(zhuǎn)帳:張三的賬戶少轉(zhuǎn)帳:張三的賬戶少1000元,李四的賬戶多元,李四的賬戶多1000元元*/UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=張三張三SE
26、T errorSum=errorSum+error -累計(jì)是否有錯(cuò)誤累計(jì)是否有錯(cuò)誤UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四李四SET errorSum=errorSum+error -累計(jì)是否有錯(cuò)誤累計(jì)是否有錯(cuò)誤/*-根據(jù)是否有錯(cuò)誤,確定事務(wù)是提交還是撤銷根據(jù)是否有錯(cuò)誤,確定事務(wù)是提交還是撤銷-*/IF errorSum0 -如果有錯(cuò)誤如果有錯(cuò)誤 BEGIN print 交易失敗,回滾事務(wù)交易失敗,回滾事務(wù) ROLLBACK TRANSACTION END ELSE BEGIN print 交易成功
27、,提交事務(wù),寫入硬盤,永久的保存交易成功,提交事務(wù),寫入硬盤,永久的保存 COMMIT TRANSACTION END 【例【例7-8】使用顯式事務(wù)來處理轉(zhuǎn)賬業(yè)務(wù)?!渴褂蔑@式事務(wù)來處理轉(zhuǎn)賬業(yè)務(wù)。 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制任務(wù)實(shí)施任務(wù)實(shí)施1使用使用WHILE循環(huán)添加循環(huán)添加10萬行數(shù)據(jù)萬行數(shù)據(jù) 2使用隨機(jī)函數(shù)使用隨機(jī)函數(shù) 3實(shí)現(xiàn)隱性事務(wù)實(shí)現(xiàn)實(shí)現(xiàn)隱性事務(wù)實(shí)現(xiàn)100行提交一次行提交一次 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制代碼分析代碼分析關(guān)鍵代碼關(guān)鍵代碼 set nocount onSET IMPLICIT_TRANSACTIONS ON- 設(shè)置開啟隱性事務(wù)設(shè)置開啟隱性事務(wù)dec
28、lare i int, cnt int, d datetimeselect d=getdate(), i=1, cnt=100000while (i=cnt)begin INSERT INTO tstuTest VALUES(i,Left(convert(varchar(40),newid(),10),i%2, convert(varchar(40), newid(), rand()*100, d-i%1000) set i = i + 1 if (i%100=0)- 每每100行提交一次行提交一次 commit tranEndSET IMPLICIT_TRANSACTIONS OFF- 設(shè)置
29、關(guān)閉自動(dòng)事務(wù)設(shè)置關(guān)閉自動(dòng)事務(wù)commit tran單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制任務(wù)二實(shí)現(xiàn)任務(wù)二實(shí)現(xiàn)“學(xué)籍變動(dòng)管理學(xué)籍變動(dòng)管理”模塊模塊 任務(wù)描述:任務(wù)描述:任務(wù)分析:任務(wù)分析:大寶經(jīng)理檢測(cè)學(xué)籍變動(dòng)模塊功能,結(jié)果發(fā)現(xiàn)了大問題:明明有兩位學(xué)生登記大寶經(jīng)理檢測(cè)學(xué)籍變動(dòng)模塊功能,結(jié)果發(fā)現(xiàn)了大問題:明明有兩位學(xué)生登記了了“休學(xué)休學(xué)”,可學(xué)生信息查詢還是,可學(xué)生信息查詢還是“在讀在讀”。大寶經(jīng)理責(zé)令張力修改。大寶經(jīng)理責(zé)令張力修改。 1需要登記手續(xù)辦理情況:學(xué)號(hào)、學(xué)籍變動(dòng)類型、何時(shí)辦理、申請(qǐng)理由、需要登記手續(xù)辦理情況:學(xué)號(hào)、學(xué)籍變動(dòng)類型、何時(shí)辦理、申請(qǐng)理由、審核領(lǐng)導(dǎo)等;如果是轉(zhuǎn)專業(yè),還需要登記轉(zhuǎn)
30、出專業(yè)、轉(zhuǎn)入專業(yè)、轉(zhuǎn)入方審審核領(lǐng)導(dǎo)等;如果是轉(zhuǎn)專業(yè),還需要登記轉(zhuǎn)出專業(yè)、轉(zhuǎn)入專業(yè)、轉(zhuǎn)入方審核領(lǐng)導(dǎo)等。核領(lǐng)導(dǎo)等。2登記學(xué)籍變動(dòng)信息后,還需要修改該學(xué)生的狀態(tài),學(xué)籍變動(dòng)造成的學(xué)生登記學(xué)籍變動(dòng)信息后,還需要修改該學(xué)生的狀態(tài),學(xué)籍變動(dòng)造成的學(xué)生狀態(tài)變化如圖所示:狀態(tài)變化如圖所示:休學(xué) 復(fù)學(xué) 退學(xué) 留級(jí),轉(zhuǎn)專業(yè) 退學(xué) 在讀 休學(xué) 退學(xué) 畢業(yè)(未就業(yè)) 畢業(yè)(已就業(yè)) 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制ADO.NET控制事務(wù)控制事務(wù)在在ADO.NET中,可以使用中,可以使用Connection和和Transaction對(duì)對(duì)象來控制事務(wù)。象來控制事務(wù)。執(zhí)行事務(wù):執(zhí)行事務(wù):調(diào)用調(diào)用Connection對(duì)
31、象的對(duì)象的BeginTransaction開始事務(wù)。開始事務(wù)。將將Transaction對(duì)象分配給要執(zhí)行的對(duì)象分配給要執(zhí)行的Command的的Transaction屬屬性。性。執(zhí)行所需的命令。執(zhí)行所需的命令。 調(diào)用調(diào)用Transaction對(duì)象的對(duì)象的Commit方法來完成事務(wù),或調(diào)用方法來完成事務(wù),或調(diào)用Rollback方法來取消事務(wù)。方法來取消事務(wù)。 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制ADO.NET控制事務(wù)范例控制事務(wù)范例【例【例7-9】實(shí)現(xiàn)銀行轉(zhuǎn)賬業(yè)務(wù)?!繉?shí)現(xiàn)銀行轉(zhuǎn)賬業(yè)務(wù)。private void btnSave_Click(object sender, EventArgs e)
32、DBHelper.connection.Open(); SqlTransaction myTrans = DBHelper.connection.BeginTransaction(); /為事務(wù)創(chuàng)建一個(gè)命令為事務(wù)創(chuàng)建一個(gè)命令 SqlCommand myCommand = new SqlCommand(); myCommand.Connection = DBHelper.connection; myCommand.Transaction = myTrans; try myCommand.CommandText = string.Format(UPDATE bank SET currentMone
33、y=currentMoney-0 WHERE customerName=1, txtMoney.Text, txtOldName.Text);myCommand.ExecuteNonQuery();myCommand.CommandText = string.Format( UPDATE bank SET currentMoney=currentMoney+0 WHERE customerName=1, txtMoney.Text, txtNewName.Text);myCommand.ExecuteNonQuery();myTrans.Commit();/提交提交MessageBox.Sho
34、w(轉(zhuǎn)賬成功!轉(zhuǎn)賬成功!); catch (Exception ex) myTrans.Rollback();/回滾回滾MessageBox.Show(轉(zhuǎn)賬失??!轉(zhuǎn)賬失??!); finally DBHelper.connection.Close(); 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制任務(wù)實(shí)施任務(wù)實(shí)施1設(shè)計(jì)界面設(shè)計(jì)界面 2創(chuàng)建視圖創(chuàng)建視圖v_student 3窗體打開時(shí)獲取學(xué)籍變動(dòng)類別信息窗體打開時(shí)獲取學(xué)籍變動(dòng)類別信息 4輸入學(xué)號(hào)后顯示該學(xué)生信息輸入學(xué)號(hào)后顯示該學(xué)生信息 5轉(zhuǎn)專業(yè),則顯示新專業(yè)的信息;否則不用填寫轉(zhuǎn)專業(yè),則顯示新專業(yè)的信息;否則不用填寫 6保存學(xué)籍變動(dòng)信息,用事務(wù)控制保存
35、學(xué)籍變動(dòng)信息,用事務(wù)控制 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制代碼分析代碼分析保存學(xué)籍變動(dòng)信息,用事務(wù)控制保存學(xué)籍變動(dòng)信息,用事務(wù)控制 private void btnSave_Click(object sender, EventArgs e) string sqlIns, sqlUpdate = String.Empty; /插入學(xué)籍變動(dòng)表的插入學(xué)籍變動(dòng)表的SQL和修改學(xué)生狀態(tài)和修改學(xué)生狀態(tài)SQL string agree = rdPass.Checked?1:0; /申請(qǐng)是否通過申請(qǐng)是否通過 string stuStaus = String.Empty; /學(xué)生狀態(tài)變量學(xué)生狀態(tài)變量 s
36、tring type = cbxType.SelectedValue.ToString();/學(xué)籍變動(dòng)類別編號(hào)學(xué)籍變動(dòng)類別編號(hào) /設(shè)置學(xué)生的目標(biāo)狀態(tài)標(biāo)志設(shè)置學(xué)生的目標(biāo)狀態(tài)標(biāo)志 switch (int.Parse(type) case 1:/休學(xué)休學(xué) stuStaus = 2; break; case 2:/復(fù)學(xué)復(fù)學(xué) stuStaus = 1;break; case 3:/退學(xué)退學(xué) stuStaus = 3;break; default:/留級(jí)、轉(zhuǎn)專業(yè)留級(jí)、轉(zhuǎn)專業(yè) stuStaus = 1;break; if (type != 5)/ 非轉(zhuǎn)專業(yè),插入學(xué)籍變動(dòng)表的非轉(zhuǎn)專業(yè),插入學(xué)籍變動(dòng)表的SQL和
37、修改學(xué)生狀態(tài)和修改學(xué)生狀態(tài)SQL sqlIns = String.Format(INSERT INTO StuStatusChange ( StudentNO,TypeID, ChangeDate,OldSpecID, Agree,OldHead,Reason,Memo) Values(0,1,2,3, 4,5,6,7), txtStudentNo.Text, type, dtDate.Text, txtSpecOldID. Text, agree, txtHeadOld.Text, txtReason.Text, txtMemo.Text);sqlUpdate = String.Format(Update Student set StudentStateID=0 where studentno=1, stuStaus, txtStudentNo.Text); 單元07用tsql增加測(cè)試數(shù)據(jù)和事務(wù)控制代碼分析代碼分析保存學(xué)籍變動(dòng)信息,用事務(wù)控制保存學(xué)籍變動(dòng)信息,用事務(wù)控制 elsesqlIns = String.Format(INSERT INTO StuStat
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 原材料長期供應(yīng)合同范本
- 房產(chǎn)轉(zhuǎn)讓合同附加協(xié)議書
- 標(biāo)準(zhǔn)離婚合同范例
- 軟件定制開發(fā)戰(zhàn)略合作合同
- 法律服務(wù)領(lǐng)域戰(zhàn)略合作合同
- 產(chǎn)學(xué)研實(shí)習(xí)基地戰(zhàn)略合作合同
- 11《十六年前的回憶》第二課時(shí) 教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語文六年級(jí)下冊(cè)
- 工程打樁包工合同范本
- 3當(dāng)沖突發(fā)生 教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治四年級(jí)下冊(cè)統(tǒng)編版
- 小學(xué)教師招聘-教師招聘考試《教學(xué)基礎(chǔ)知識(shí)》押題密卷3
- WB/T 1066-2017貨架安裝及驗(yàn)收技術(shù)條件
- SB/T 10446-2007成品油批發(fā)企業(yè)管理技術(shù)規(guī)范
- 瀝青路面施工質(zhì)量控制要點(diǎn)課件
- 雀巢碘超標(biāo)危機(jī)公關(guān)分析
- 六年級(jí)奧數(shù)教材
- 螞蟻王國 完整版PPT
- 小學(xué)體育 一年級(jí) 居家跳繩練習(xí) 課件
- EFM022靜電場(chǎng)測(cè)試儀操作說明書
- 七年級(jí)語文閱讀理解十篇含答案解析
- 單元知識(shí)結(jié)構(gòu)圖(排球)
- 卡通風(fēng)寒假生活PPT模板課件
評(píng)論
0/150
提交評(píng)論