




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2017年9月8日大三暑假小學(xué)期 數(shù)據(jù)庫系統(tǒng)開發(fā)-郭貴鎖老師實(shí)驗(yàn)報(bào)告姓名: 學(xué)號(hào): 班級(jí): 實(shí)驗(yàn): 訂單管理 時(shí)間: 2017年9月28日 目錄一、 實(shí)驗(yàn)?zāi)康模ㄍㄟ^實(shí)驗(yàn)要達(dá)到什么樣的效果,學(xué)到什么東西)二、 實(shí)驗(yàn)條件(實(shí)驗(yàn)使用軟件)三、 實(shí)驗(yàn)內(nèi)容(實(shí)驗(yàn)需要做的具體詳細(xì)的實(shí)驗(yàn)項(xiàng)目)四、 實(shí)驗(yàn)要求(實(shí)驗(yàn)中,我們要注意的實(shí)驗(yàn)事項(xiàng)和寫實(shí)驗(yàn)報(bào)告的詳細(xì)要求)五、 實(shí)驗(yàn)步驟(實(shí)驗(yàn)步驟包括具體的每個(gè)實(shí)驗(yàn)的實(shí)驗(yàn)方法、實(shí)驗(yàn)結(jié)果和實(shí)驗(yàn)結(jié)果分析,按照每步遇到的問題,進(jìn)行分析解決)六、 實(shí)驗(yàn)感悟(總結(jié)實(shí)驗(yàn)中遇到的問題,以后該怎么解決)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)數(shù)據(jù)庫應(yīng)用程序的開發(fā)和實(shí)現(xiàn)部分功能(查詢、插入、刪除、更新和保存等)二
2、、實(shí)驗(yàn)條件Microsoft SQL Server Management StudioMicrosoft Visual StudioWindows 8C#編程語言3、 實(shí)驗(yàn)內(nèi)容編程實(shí)現(xiàn)示例數(shù)據(jù)庫中訂單明細(xì)SalesOrderDetail的查詢、插入、更新與刪除功能如下:(1)查詢功能。程序運(yùn)行后,訂單表中顯示所有訂單,第一個(gè)訂單為當(dāng)前訂單,訂單明細(xì)表中顯示當(dāng)前訂單的所有訂單明細(xì)。當(dāng)前訂單發(fā)生改變時(shí)(即點(diǎn)擊訂單表中的某個(gè)訂單埋),訂單明細(xì)表中的內(nèi)容發(fā)生相應(yīng)的變化。(2) 刪除功能:選取訂單明細(xì)中的一行,點(diǎn)擊刪除,選擇的訂單明細(xì)從表中刪除,但并不真正從數(shù)據(jù)庫中刪除。(3) 插入功能:可以在訂單明細(xì)
3、表的最后輸入新的訂單明細(xì)。(4) 更新功能:可以修改訂單明細(xì)表中的某一行的內(nèi)容。如果輸入的單價(jià)(UnitPrice)大于產(chǎn)品的公開報(bào)價(jià),則提示相應(yīng)的信息(利用4.6.2的觸發(fā)器完成此功能)。(5) 保存功能:點(diǎn)擊保存按鈕時(shí),將訂單明細(xì)保存到數(shù)據(jù)庫。(6)關(guān)閉功能:點(diǎn)擊關(guān)閉按鈕時(shí),如果訂單明細(xì)有修改但沒有保存,則提示是否關(guān)閉,如果不關(guān)閉則返回,否則關(guān)閉程序,如果沒有修改,則直接關(guān)閉。四、實(shí)驗(yàn)要求1.訂單查詢實(shí)驗(yàn)要求使用ADO.NET并任選一種程序設(shè)計(jì)語言進(jìn)行編程。實(shí)驗(yàn)報(bào)告需要說明所采用的方法、結(jié)果和總結(jié)(結(jié)果分析)。實(shí)驗(yàn)方法部分說明采用的開發(fā)環(huán)境,包括操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)及其版本、編程工具及
4、其版本、和編程語言。如果使用ADO.NET則在實(shí)驗(yàn)方法部分回答下面的問題:(1) 使用哪種數(shù)據(jù)提供程序?(2) 使用的數(shù)據(jù)連接對象是哪一個(gè)?連接對象是如何建立的?最后生成的連接對象中的連接字符串是什么?代表什么含義?(3) 使用的數(shù)據(jù)適配器對象是什么?其中的查詢或更新語句是什么?如果有參數(shù)則參數(shù)是如何處理的?(4) 使用的數(shù)據(jù)集對象是什么?數(shù)據(jù)集中有哪些數(shù)據(jù)表?數(shù)據(jù)表是由哪些適配器對象生成的?(或采用其它方法)。實(shí)驗(yàn)方法中還需要給出手工添加的代碼及對代碼的說明。實(shí)驗(yàn)結(jié)果部分給出程序運(yùn)行的界面和操作的簡單說明??偨Y(jié)部分對實(shí)驗(yàn)過程中出現(xiàn)的總是進(jìn)行分析,同時(shí)提出所開發(fā)的程序還有哪些可以改進(jìn)的地方。5
5、、 實(shí)驗(yàn)步驟實(shí)驗(yàn)方法:回答實(shí)驗(yàn)要求中的實(shí)驗(yàn)問題(1)使用哪種數(shù)據(jù)提供程序?答:OLEDB類數(shù)據(jù)。(2)使用的數(shù)據(jù)連接對象是哪一個(gè)?連接對象是如何建立的?最后生成的連接對象中的連接字符串是什么?代表什么含義?答:連接對象oleDbConnection1數(shù)據(jù)適配器:oleDbDataAdapter1和oleDbDataAdapter2oleDbDataAdapter1Provider=SQLNCLI11(客戶端組件,代表一個(gè)驅(qū)動(dòng))Data Source=LENOVO-PC(代表數(shù)據(jù)源是LENOVO-PC)Security=SSPI(代表以window用戶登錄服務(wù)器)Initial Catlog=A
6、dventureWorks(代表連接數(shù)據(jù)庫為AdventureWorks)oleDbDataAdapter2Provider=SQLNCLI11(客戶端組件,代表一個(gè)驅(qū)動(dòng))Data Source=LENOVO-PC(代表數(shù)據(jù)源是LENOVO-PC)Security=SSPI(代表以window用戶登錄服務(wù)器)Initial Catlog=AdventureWorks(代表連接數(shù)據(jù)庫為AdventureWorks)(3) 使用的數(shù)據(jù)適配器對象是什么?其中的查詢或更新語句是什么?如果有參數(shù)則參數(shù)是如何處理的?答:oleDbDataAdapter1:1)查詢語句:SELECT SalesOrderI
7、D, OrderDate, DueDate, ShipDate, Status, SalesOrderNumberFROM Sales.SalesOrderHeader2)沒有參數(shù)OleDbDataAdapter2:1) 查詢語句:SELECT SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber, OrderQty, ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount, LineTotal, rowguid, ModifiedDateFROM Sales.SalesOrder
8、Detail2)沒有參數(shù)(4)使用的數(shù)據(jù)集對象是什么?數(shù)據(jù)集中有哪些數(shù)據(jù)表?數(shù)據(jù)表是由哪些適配器對象生成的?(或采用其它方法)。答:dataSet11->SalesOrderHeader表->oleDbDataAdapter1dataSet21->SalesOrderDetail表->oleDbDataAdapter21. 基本框架設(shè)計(jì)介紹1.1新建一個(gè)項(xiàng)目客戶管理4.0,選擇的參數(shù)如下1.2打開新建的項(xiàng)目客戶管理4.0 1.3窗口進(jìn)行如下圖所示的設(shè)計(jì)訂單:使用dataGridView創(chuàng)建,名字設(shè)置為dataGridView1 Datasource:dataSet11D
9、atamember:SalesOrderHeader訂單明細(xì):使用datagridview創(chuàng)建,名字設(shè)置為dataGridView2Datasource:dataSet21Datamember:SalesOrderDetailoleDbConnection1:連接數(shù)據(jù)庫AdventureWorksoleDbDataAdapter1->dataSet11oleDbDataAdapter2->dataSet21填充dataGrid控件:dataGridView1和dataGridView2 private void Form1_Load(object sender, EventArgs
10、 e) oleDbDataAdapter1.Fill(dataSet11); oleDbDataAdapter2.Fill(dataSet21); 1.4數(shù)據(jù)庫環(huán)境設(shè)置連接SQL Server中的默認(rèn)數(shù)據(jù)庫AdventureWorks2. 查詢功能的實(shí)現(xiàn)2.1實(shí)現(xiàn)功能代碼private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) string msg = dataGridView1e.ColumnIndex, e.RowIndex.Value.ToString(); String
11、 strCustomerDelete = "Select * FROM Sales.SalesOrderDetail WHERE SalesOrderID =" + msg; Console.Write(strCustomerDelete); oleDbDataAdapter2.SelectCommand.CommandText = strCustomerDelete; this.dataSet21.Clear(); /刷新 this.oleDbDataAdapter2.Fill(this.dataSet21); /填充2.2查詢SalesOrderID=43661的所有訂
12、單明細(xì)3. 刪除功能的實(shí)現(xiàn)3.1實(shí)現(xiàn)功能代碼3.2如圖刪除SalesOrderID=43661,SalesOrderDetailID=15的訂單,結(jié)果如下點(diǎn)擊43661后查詢結(jié)果如下選擇43661中SalesOrderDetailID=15的一行并點(diǎn)擊刪除按鈕,則刪除這行數(shù)據(jù),如下圖所示:4. 插入功能的實(shí)現(xiàn)4.1實(shí)驗(yàn)指導(dǎo)書中已經(jīng)給出介紹,SalesOrderDetail的rowguid列是一個(gè)uniqueidentifier類型,不允許空值。手工輸入該值比較困難,可以使用程序進(jìn)行處理。即手工輸入時(shí)不輸入該值,保存到數(shù)據(jù)庫之前由程序生成該列的值。4.2如下圖在SalesOrderID=4366
13、1的訂單明細(xì)的最下方添加一行新的訂單沒有插入新的訂單之前的位置插入如圖所示的新訂單信息5. 更新功能的實(shí)現(xiàn)5.1在AdventureWorks數(shù)據(jù)庫中創(chuàng)建表Production.ProductUpdateLog,用來記錄訂單編號(hào)、訂單明細(xì)編號(hào)、產(chǎn)品編號(hào)、產(chǎn)品的公開報(bào)價(jià)、修改前產(chǎn)品的單價(jià)、修改后產(chǎn)品的單價(jià)、修改者的登錄名SQL語句如下:CREATE TABLE Production.ProductUpdateLog( 記錄編號(hào) int IDENTITY PRIMARY key, -保證編號(hào)唯一,且隨插入數(shù)據(jù)的數(shù)據(jù)逐一遞增訂單編號(hào) int not null,訂單明細(xì)編號(hào) int not null,
14、產(chǎn)品編號(hào) int not null,產(chǎn)品的公開報(bào)價(jià) money,修改前產(chǎn)品的單價(jià) money,修改后產(chǎn)品的單價(jià) money,修改者的登錄名 varchar(30) not null)GO創(chuàng)建的表如下圖所示:5.2 創(chuàng)建名為Product.ProductUpdateCheck的存儲(chǔ)過程,來向表PductUpdateLog中插入數(shù)據(jù),實(shí)現(xiàn)代碼如下USE AdventureWorksGOIF OBJECT_ID('Production.Record_Update_Price','P')IS NOT NULLDROP PROCEDURE Pro
15、duction.Record_Update_PriceGO-如果數(shù)據(jù)庫中存在名稱為Production.Record_Update_Price的存儲(chǔ)過程-則刪除該存儲(chǔ)過程-創(chuàng)建存儲(chǔ)過程Production.Record_Update_Price,它有個(gè)參數(shù),-其中SalesorderID 表示訂單編號(hào),SalesorderdetailID 表示訂單明細(xì)編號(hào)-ProductID 表示產(chǎn)品編號(hào),PublicPrice 表示公開報(bào)價(jià)-PrePrice 表示修改前價(jià)格,PostPrice 表示修改后報(bào)價(jià)-Operator 表示修改者登錄名CREATE PROCEDURE Production.Reco
16、rd_Update_Price-RecordID int,-因?yàn)楸砀馪roductUpdateLog的主鍵設(shè)為IDENTITY性質(zhì),不用傳參SalesorderID int,SalesorderdetailID int, ProductID int,PublicPrice money, PrePrice money,PostPrice money, Operator nvarchar(50)AS-向表ProductUpdateLog插入一條記錄,參數(shù)紛紛對應(yīng)INSERT INTO Production.ProductUpdateLog(-記錄編號(hào),訂單編號(hào),訂單明細(xì)編號(hào), 產(chǎn)品編號(hào),產(chǎn)品公開報(bào)
17、價(jià), 修改前產(chǎn)品單價(jià),修改后產(chǎn)品單價(jià), 修改者登錄名)VALUES(-RecordID,SalesorderID,SalesorderdetailID, ProductID,PublicPrice, PrePrice,PostPrice, Operator)GOUSE AdventureWorksGOIF OBJECT_ID('Production.Record_Update_Price','P')IS NOT NULLDROP PROCEDURE Production.Record_Update_PriceGO-如果數(shù)據(jù)庫中存在名稱為Production.Re
18、cord_Update_Price的存儲(chǔ)過程-則刪除該存儲(chǔ)過程-創(chuàng)建存儲(chǔ)過程Production.Record_Update_Price,它有個(gè)參數(shù),-其中SalesorderID 表示訂單編號(hào),SalesorderdetailID 表示訂單明細(xì)編號(hào)-ProductID 表示產(chǎn)品編號(hào),PublicPrice 表示公開報(bào)價(jià)-PrePrice 表示修改前價(jià)格,PostPrice 表示修改后報(bào)價(jià)-Operator 表示修改者登錄名CREATE PROCEDURE Production.Record_Update_Price-RecordID int,-因?yàn)楸砀馪roductUpdateLog的主鍵設(shè)
19、為IDENTITY性質(zhì),不用傳參SalesorderID int,SalesorderdetailID int, ProductID int,PublicPrice money, PrePrice money,PostPrice money, Operator nvarchar(50)AS-向表ProductUpdateLog插入一條記錄,參數(shù)紛紛對應(yīng)INSERT INTO Production.ProductUpdateLog(-記錄編號(hào),訂單編號(hào),訂單明細(xì)編號(hào), 產(chǎn)品編號(hào),產(chǎn)品公開報(bào)價(jià), 修改前產(chǎn)品單價(jià),修改后產(chǎn)品單價(jià), 修改者登錄名)VALUES(-RecordID,Salesorder
20、ID,SalesorderdetailID, ProductID,PublicPrice, PrePrice,PostPrice, Operator)GO5.3建立名為Sales.Price_Update的觸發(fā)器實(shí)現(xiàn)代碼如下:USE AdventureWorksGO-如果已經(jīng)存在名為Sales.Price_Update的觸發(fā)器,則刪除它IF OBJECT_ID('Sales.Price_Update','TR')IS NOT NULLDROP TRIGGER Sales.Price_UpdateGO-在
21、表Sales.SalesOrderDetail的Update操作上創(chuàng)建-Instead of觸發(fā)器Sales.Price_UpdateCREATE TRIGGER Sales.Price_Update ON Sales.SalesOrderDetailINSTEAD OF UpdateAS-當(dāng)更新插入記錄的更新價(jià)格UnitPrice大于-產(chǎn)品的公開報(bào)價(jià)Production.Product.ListPrice時(shí)-調(diào)用RAISERROR報(bào)錯(cuò),進(jìn)行操作回滾IF(EXISTS( SELECT I.Un
22、itPriceFROM Production.Product P, inserted IWHERE I.UnitPrice > P.ListPrice AND P.ProductID = I.ProductID)BEGINRAISERROR('修改的產(chǎn)品單價(jià)不能大于產(chǎn)品的公開報(bào)價(jià)!', 10, 1) ROLLBACK TRANSACTIONEND-如果符合更新價(jià)格不大于公開報(bào)價(jià)的條件-則調(diào)用存儲(chǔ)過程Production.Record_
23、Update_PriceELSEBEGIN-聲明相對應(yīng)的個(gè)參數(shù),數(shù)據(jù)類型一致對應(yīng)DECLARE SalesorderID int, SalesorderdetailID int, ProductID int, ListPrice money, &
24、#160; PreUnitPrice money, PostUnitPrice money, Operator nvarchar(50)-訂單編號(hào)、訂單明細(xì)編號(hào)、產(chǎn)品編號(hào)及產(chǎn)品修改后價(jià)格-皆取自表inserted相對應(yīng)值SELECT SalesorderID = SalesOrderID,
25、160; SalesorderdetailID = SalesOrderDetailID, ProductID = ProductID, PostUnitPrice = UnitPrice FROM inserted-產(chǎn)品公開報(bào)價(jià)取自表Production.Product的ListPrice SELECT ListPrice =
26、0;ListPrice FROM Production.Product PWHERE P.ProductID = (SELECT ProductIDFROM inserted)-執(zhí)行更新操作,將表Sales.SalesOrderDetail所對應(yīng)的記錄的-UnitPrice值更新UPDATE Sales.SalesOrderDetailSET UnitPrice = PostUnitPriceWHERE Sales.SalesOrderDetail.SalesOrd
27、erID = SalesorderIDAND Sales.SalesOrderDetail.SalesOrderDetailID = SalesorderdetailID-修改前的產(chǎn)品價(jià)格取自表中deleted-表Sales.SalesOrderDetail對應(yīng)被刪除的記錄UnitPriceSELECT PreUnitPrice = UnitPrice FROM deleted DWHERE D.ProductID =( SELECT Produ
28、ctIDFROM inserted )-獲取當(dāng)前修改者登錄名-在網(wǎng)上搜到了這個(gè)系統(tǒng)內(nèi)置函數(shù)SELECT Operator = SYSTEM_USER-將個(gè)參數(shù)對應(yīng)位置傳入存儲(chǔ)過程Production.Record_Update_PriceEXECUTE Production.Record_Update_Price SalesorderID, SalesorderdetailID, ProductID, ListPrice,
29、PreUnitPrice, PostUnitPrice, Operator-提示已經(jīng)進(jìn)入存儲(chǔ)過程PRINT 'HERE COMES A PROCEDURE.'ENDGO創(chuàng)建的觸發(fā)器如下圖所示:5.4在訂單明細(xì)中修改一行中的一個(gè)數(shù)據(jù),如輸入的單價(jià)(UnitPrice)不符合產(chǎn)品的公開報(bào)價(jià)范圍時(shí),窗口會(huì)出現(xiàn)提示,并組織修改的保存 6.保存功能的實(shí)現(xiàn)6.1保存功能實(shí)現(xiàn)代碼 private void button2_Click(object sender, EventArgs e) try / 檢查數(shù)據(jù)表各行,設(shè)置
30、新行的rowguid列 foreach (DataRow dataRow in this.dataSet21.SalesOrderDetail.Rows) / 如果是新行 if (dataRow.RowState = DataRowState.Added) / 如果rowguid列的值是空值 if (dataRow"rowguid".Equals(System.DBNull.Value) dataRow"rowguid" = Guid.NewGuid(); this.oleDbDataAdapter2.Update(this.dataSet21.Sale
31、sOrderDetail); MessageBox.Show("保存成功!"); catch (Exception ex) MessageBox.Show("保存失敗!n" + ex.Message); 6.2功能實(shí)現(xiàn)結(jié)果如下圖,把SalesOrderID=43863&SalesOrderDetailID=671的D0C0-435D-A2修改成D0C0-435D-B2修改后點(diǎn)擊保存按鈕,結(jié)果如圖所示再次查詢這個(gè)SalesOrderID=43863&SalesOrderDetailID=671的訂單明細(xì),可以看到已經(jīng)保存到數(shù)據(jù)庫了7.關(guān)閉功
32、能的實(shí)現(xiàn)7.1關(guān)閉功能實(shí)現(xiàn)代碼 private void button3_Click(object sender, EventArgs e) bool Save_Flag = true;/定義一個(gè)波爾變量save_flag for (int i = 0; i < this.dataSet21.SalesOrderDetail.Rows.Count; i+)/全局掃描,判斷是否有修改 if (this.dataSet21.SalesOrderDetail.Rowsi.RowState != DataRowState.Unchanged) Save_Flag = false; break; if (Save_Flag = false) if (DialogResult.Yes = MessageBox.Show(" 是否要保存對訂單明細(xì)的更改?", "提示", MessageBoxButtons.YesNo)/若確定則關(guān)閉窗口不保存更改數(shù)據(jù),否則回到原來窗口 this.Clo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國移動(dòng)家客L1練習(xí)試題及答案
- 專利轉(zhuǎn)讓實(shí)施合同樣本
- 臨時(shí)拆遷合同樣本
- 債務(wù)處理授權(quán)合同樣本
- 屋頂光伏項(xiàng)目可行性分析報(bào)告
- 推動(dòng)新型工業(yè)化邁向高質(zhì)量發(fā)展
- 企業(yè)人員合同樣本
- 產(chǎn)品入門費(fèi)合同樣本
- 上海留學(xué)合同樣本
- 公司租民房合同樣本
- 夫妻房產(chǎn)贈(zèng)與一半?yún)f(xié)議書范本
- 彈性延遲退休協(xié)議書示范文本
- DGTJ 08-2024-2016 用戶高壓電氣裝置規(guī)范
- GB/T 26718-2024城市軌道交通安全防范系統(tǒng)技術(shù)要求
- 母嬰護(hù)理師培訓(xùn)課件
- DB32/T 4743-2024重點(diǎn)化工企業(yè)全流程自動(dòng)化控制配備和提升規(guī)范
- 二年級(jí)小學(xué)生安全教育課件(有配套教學(xué)設(shè)計(jì))
- 病房發(fā)生停電的應(yīng)急預(yù)案
- 推拿治療學(xué)腰肌勞損
- 人工智能賦能教師數(shù)字素養(yǎng)提升
- 戰(zhàn)略管理知到智慧樹章節(jié)測試課后答案2024年秋華南理工大學(xué)
評論
0/150
提交評論