數(shù)據(jù)庫系統(tǒng)開發(fā)實驗三_第1頁
數(shù)據(jù)庫系統(tǒng)開發(fā)實驗三_第2頁
數(shù)據(jù)庫系統(tǒng)開發(fā)實驗三_第3頁
數(shù)據(jù)庫系統(tǒng)開發(fā)實驗三_第4頁
數(shù)據(jù)庫系統(tǒng)開發(fā)實驗三_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、2017年9月8日大三暑假小學期 數(shù)據(jù)庫系統(tǒng)開發(fā)-郭貴鎖老師實驗報告姓名: 學號: 班級: 實驗: 訂單管理 時間: 2017年9月28日 目錄一、 實驗目的(通過實驗要達到什么樣的效果,學到什么東西)二、 實驗條件(實驗使用軟件)三、 實驗內(nèi)容(實驗需要做的具體詳細的實驗項目)四、 實驗要求(實驗中,我們要注意的實驗事項和寫實驗報告的詳細要求)五、 實驗步驟(實驗步驟包括具體的每個實驗的實驗方法、實驗結果和實驗結果分析,按照每步遇到的問題,進行分析解決)六、 實驗感悟(總結實驗中遇到的問題,以后該怎么解決)一、實驗目的學習數(shù)據(jù)庫應用程序的開發(fā)和實現(xiàn)部分功能(查詢、插入、刪除、更新和保存等)二

2、、實驗條件Microsoft SQL Server Management StudioMicrosoft Visual StudioWindows 8C#編程語言3、 實驗內(nèi)容編程實現(xiàn)示例數(shù)據(jù)庫中訂單明細SalesOrderDetail的查詢、插入、更新與刪除功能如下:(1)查詢功能。程序運行后,訂單表中顯示所有訂單,第一個訂單為當前訂單,訂單明細表中顯示當前訂單的所有訂單明細。當前訂單發(fā)生改變時(即點擊訂單表中的某個訂單埋),訂單明細表中的內(nèi)容發(fā)生相應的變化。(2) 刪除功能:選取訂單明細中的一行,點擊刪除,選擇的訂單明細從表中刪除,但并不真正從數(shù)據(jù)庫中刪除。(3) 插入功能:可以在訂單明細

3、表的最后輸入新的訂單明細。(4) 更新功能:可以修改訂單明細表中的某一行的內(nèi)容。如果輸入的單價(UnitPrice)大于產(chǎn)品的公開報價,則提示相應的信息(利用4.6.2的觸發(fā)器完成此功能)。(5) 保存功能:點擊保存按鈕時,將訂單明細保存到數(shù)據(jù)庫。(6)關閉功能:點擊關閉按鈕時,如果訂單明細有修改但沒有保存,則提示是否關閉,如果不關閉則返回,否則關閉程序,如果沒有修改,則直接關閉。四、實驗要求1.訂單查詢實驗要求使用ADO.NET并任選一種程序設計語言進行編程。實驗報告需要說明所采用的方法、結果和總結(結果分析)。實驗方法部分說明采用的開發(fā)環(huán)境,包括操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)及其版本、編程工具及

4、其版本、和編程語言。如果使用ADO.NET則在實驗方法部分回答下面的問題:(1) 使用哪種數(shù)據(jù)提供程序?(2) 使用的數(shù)據(jù)連接對象是哪一個?連接對象是如何建立的?最后生成的連接對象中的連接字符串是什么?代表什么含義?(3) 使用的數(shù)據(jù)適配器對象是什么?其中的查詢或更新語句是什么?如果有參數(shù)則參數(shù)是如何處理的?(4) 使用的數(shù)據(jù)集對象是什么?數(shù)據(jù)集中有哪些數(shù)據(jù)表?數(shù)據(jù)表是由哪些適配器對象生成的?(或采用其它方法)。實驗方法中還需要給出手工添加的代碼及對代碼的說明。實驗結果部分給出程序運行的界面和操作的簡單說明。總結部分對實驗過程中出現(xiàn)的總是進行分析,同時提出所開發(fā)的程序還有哪些可以改進的地方。5

5、、 實驗步驟實驗方法:回答實驗要求中的實驗問題(1)使用哪種數(shù)據(jù)提供程序?答:OLEDB類數(shù)據(jù)。(2)使用的數(shù)據(jù)連接對象是哪一個?連接對象是如何建立的?最后生成的連接對象中的連接字符串是什么?代表什么含義?答:連接對象oleDbConnection1數(shù)據(jù)適配器:oleDbDataAdapter1和oleDbDataAdapter2oleDbDataAdapter1Provider=SQLNCLI11(客戶端組件,代表一個驅動)Data Source=LENOVO-PC(代表數(shù)據(jù)源是LENOVO-PC)Security=SSPI(代表以window用戶登錄服務器)Initial Catlog=A

6、dventureWorks(代表連接數(shù)據(jù)庫為AdventureWorks)oleDbDataAdapter2Provider=SQLNCLI11(客戶端組件,代表一個驅動)Data Source=LENOVO-PC(代表數(shù)據(jù)源是LENOVO-PC)Security=SSPI(代表以window用戶登錄服務器)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. 基本框架設計介紹1.1新建一個項目客戶管理4.0,選擇的參數(shù)如下1.2打開新建的項目客戶管理4.0 1.3窗口進行如下圖所示的設計訂單:使用dataGridView創(chuàng)建,名字設置為dataGridView1 Datasource:dataSet11D

9、atamember:SalesOrderHeader訂單明細:使用datagridview創(chuàng)建,名字設置為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)境設置連接SQL Server中的默認數(shù)據(jù)庫AdventureWorks2. 查詢功能的實現(xiàn)2.1實現(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、單明細3. 刪除功能的實現(xiàn)3.1實現(xiàn)功能代碼3.2如圖刪除SalesOrderID=43661,SalesOrderDetailID=15的訂單,結果如下點擊43661后查詢結果如下選擇43661中SalesOrderDetailID=15的一行并點擊刪除按鈕,則刪除這行數(shù)據(jù),如下圖所示:4. 插入功能的實現(xiàn)4.1實驗指導書中已經(jīng)給出介紹,SalesOrderDetail的rowguid列是一個uniqueidentifier類型,不允許空值。手工輸入該值比較困難,可以使用程序進行處理。即手工輸入時不輸入該值,保存到數(shù)據(jù)庫之前由程序生成該列的值。4.2如下圖在SalesOrderID=4366

13、1的訂單明細的最下方添加一行新的訂單沒有插入新的訂單之前的位置插入如圖所示的新訂單信息5. 更新功能的實現(xiàn)5.1在AdventureWorks數(shù)據(jù)庫中創(chuàng)建表Production.ProductUpdateLog,用來記錄訂單編號、訂單明細編號、產(chǎn)品編號、產(chǎn)品的公開報價、修改前產(chǎn)品的單價、修改后產(chǎn)品的單價、修改者的登錄名SQL語句如下:CREATE TABLE Production.ProductUpdateLog( 記錄編號 int IDENTITY PRIMARY key, -保證編號唯一,且隨插入數(shù)據(jù)的數(shù)據(jù)逐一遞增訂單編號 int not null,訂單明細編號 int not null,

14、產(chǎn)品編號 int not null,產(chǎn)品的公開報價 money,修改前產(chǎn)品的單價 money,修改后產(chǎn)品的單價 money,修改者的登錄名 varchar(30) not null)GO創(chuàng)建的表如下圖所示:5.2 創(chuàng)建名為Product.ProductUpdateCheck的存儲過程,來向表PductUpdateLog中插入數(shù)據(jù),實現(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的存儲過程-則刪除該存儲過程-創(chuàng)建存儲過程Production.Record_Update_Price,它有個參數(shù),-其中SalesorderID 表示訂單編號,SalesorderdetailID 表示訂單明細編號-ProductID 表示產(chǎn)品編號,PublicPrice 表示公開報價-PrePrice 表示修改前價格,PostPrice 表示修改后報價-Operator 表示修改者登錄名CREATE PROCEDURE Production.Reco

16、rd_Update_Price-RecordID int,-因為表格ProductUpdateLog的主鍵設為IDENTITY性質,不用傳參SalesorderID int,SalesorderdetailID int, ProductID int,PublicPrice money, PrePrice money,PostPrice money, Operator nvarchar(50)AS-向表ProductUpdateLog插入一條記錄,參數(shù)紛紛對應INSERT INTO Production.ProductUpdateLog(-記錄編號,訂單編號,訂單明細編號, 產(chǎn)品編號,產(chǎn)品公開報

17、價, 修改前產(chǎn)品單價,修改后產(chǎn)品單價, 修改者登錄名)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的存儲過程-則刪除該存儲過程-創(chuàng)建存儲過程Production.Record_Update_Price,它有個參數(shù),-其中SalesorderID 表示訂單編號,SalesorderdetailID 表示訂單明細編號-ProductID 表示產(chǎn)品編號,PublicPrice 表示公開報價-PrePrice 表示修改前價格,PostPrice 表示修改后報價-Operator 表示修改者登錄名CREATE PROCEDURE Production.Record_Update_Price-RecordID int,-因為表格ProductUpdateLog的主鍵設

19、為IDENTITY性質,不用傳參SalesorderID int,SalesorderdetailID int, ProductID int,PublicPrice money, PrePrice money,PostPrice money, Operator nvarchar(50)AS-向表ProductUpdateLog插入一條記錄,參數(shù)紛紛對應INSERT INTO Production.ProductUpdateLog(-記錄編號,訂單編號,訂單明細編號, 產(chǎn)品編號,產(chǎn)品公開報價, 修改前產(chǎn)品單價,修改后產(chǎn)品單價, 修改者登錄名)VALUES(-RecordID,Salesorder

20、ID,SalesorderdetailID, ProductID,PublicPrice, PrePrice,PostPrice, Operator)GO5.3建立名為Sales.Price_Update的觸發(fā)器實現(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-當更新插入記錄的更新價格UnitPrice大于-產(chǎn)品的公開報價Production.Product.ListPrice時-調(diào)用RAISERROR報錯,進行操作回滾IF(EXISTS( SELECT I.Un

22、itPriceFROM Production.Product P, inserted IWHERE I.UnitPrice > P.ListPrice AND P.ProductID = I.ProductID)BEGINRAISERROR('修改的產(chǎn)品單價不能大于產(chǎn)品的公開報價!', 10, 1) ROLLBACK TRANSACTIONEND-如果符合更新價格不大于公開報價的條件-則調(diào)用存儲過程Production.Record_

23、Update_PriceELSEBEGIN-聲明相對應的個參數(shù),數(shù)據(jù)類型一致對應DECLARE SalesorderID int,        SalesorderdetailID int,        ProductID int,        ListPrice money,  &

24、#160;     PreUnitPrice money,        PostUnitPrice money,        Operator nvarchar(50)-訂單編號、訂單明細編號、產(chǎn)品編號及產(chǎn)品修改后價格-皆取自表inserted相對應值SELECT SalesorderID = SalesOrderID,&#

25、160;  SalesorderdetailID = SalesOrderDetailID,   ProductID = ProductID,   PostUnitPrice = UnitPrice    FROM inserted-產(chǎn)品公開報價取自表Production.Product的ListPrice    SELECT ListPrice =

26、0;ListPrice FROM Production.Product PWHERE P.ProductID = (SELECT ProductIDFROM inserted)-執(zhí)行更新操作,將表Sales.SalesOrderDetail所對應的記錄的-UnitPrice值更新UPDATE Sales.SalesOrderDetailSET UnitPrice = PostUnitPriceWHERE Sales.SalesOrderDetail.SalesOrd

27、erID = SalesorderIDAND Sales.SalesOrderDetail.SalesOrderDetailID = SalesorderdetailID-修改前的產(chǎn)品價格取自表中deleted-表Sales.SalesOrderDetail對應被刪除的記錄UnitPriceSELECT PreUnitPrice = UnitPrice FROM deleted DWHERE D.ProductID =( SELECT Produ

28、ctIDFROM inserted   )-獲取當前修改者登錄名-在網(wǎng)上搜到了這個系統(tǒng)內(nèi)置函數(shù)SELECT Operator = SYSTEM_USER-將個參數(shù)對應位置傳入存儲過程Production.Record_Update_PriceEXECUTE Production.Record_Update_Price SalesorderID,   SalesorderdetailID,  ProductID, ListPrice,  

29、PreUnitPrice, PostUnitPrice,  Operator-提示已經(jīng)進入存儲過程PRINT 'HERE COMES A PROCEDURE.'ENDGO創(chuàng)建的觸發(fā)器如下圖所示:5.4在訂單明細中修改一行中的一個數(shù)據(jù),如輸入的單價(UnitPrice)不符合產(chǎn)品的公開報價范圍時,窗口會出現(xiàn)提示,并組織修改的保存 6.保存功能的實現(xiàn)6.1保存功能實現(xiàn)代碼 private void button2_Click(object sender, EventArgs e) try / 檢查數(shù)據(jù)表各行,設置

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功能實現(xiàn)結果如下圖,把SalesOrderID=43863&SalesOrderDetailID=671的D0C0-435D-A2修改成D0C0-435D-B2修改后點擊保存按鈕,結果如圖所示再次查詢這個SalesOrderID=43863&SalesOrderDetailID=671的訂單明細,可以看到已經(jīng)保存到數(shù)據(jù)庫了7.關閉功

32、能的實現(xiàn)7.1關閉功能實現(xiàn)代碼 private void button3_Click(object sender, EventArgs e) bool Save_Flag = true;/定義一個波爾變量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(" 是否要保存對訂單明細的更改?", "提示", MessageBoxButtons.YesNo)/若確定則關閉窗口不保存更改數(shù)據(jù),否則回到原來窗口 this.Clo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論