数据库系统开发实验

上传人:彩*** 文档编号:66369753 上传时间:2022-03-28 格式:DOC 页数:26 大小:809KB
收藏 版权申诉 举报 下载
数据库系统开发实验_第1页
第1页 / 共26页
数据库系统开发实验_第2页
第2页 / 共26页
数据库系统开发实验_第3页
第3页 / 共26页
资源描述:

《数据库系统开发实验》由会员分享,可在线阅读,更多相关《数据库系统开发实验(26页珍藏版)》请在装配图网上搜索。

1、实验报告姓名:学号:班级:实验:订单管理时间:2017 年9月28日1/262/26.目录一、 实验目的(通过实验要达到什么样的效果,学到什么东西)二、 实验条件(实验使用软件)三、 实验内容(实验需要做的具体详细的实验项目)四、 实验要求(实验中,我们要注意的实验事项和写实验报告的详细要求)五、 实验步骤(实验步骤包括具体的每个实验的实验方法、 实验结果和实验结果分析,按照每步遇到的问题,进行分析解决)六、 实验感悟(总结实验中遇到的问题,以后该怎么解决)1/26.一、实验目的学习数据库应用程序的开发和实现部分功能(查询、插入、删除、更新和保存等)二、实验条件Microsoft SQL Se

2、rver Management StudioMicrosoft Visual StudioWindows 8C#编程语言三、实验内容编程实现示例数据库中订单明细SalesOrderDetail 的查询、 插入、更新与删除功能如下:( 1)查询功能。程序运行后,订单表中显示所有订单,第一个订单为当前订单,订单明细表中显示当前订单的所有订单明细。 当前订单发生改变时 (即点击订单表中的某个订单埋),订单明细表中的内容发生相应的变化。( 2)删除功能:选取订单明细中的一行,点击删除,选择的订单明细从表中删除,但并不真正从数据库中删除。( 3)插入功能:可以在订单明细表的最后输入新的订单明细。(4)更

3、新功能: 可以修改订单明细表中的某一行的内容。如果输入的单价 (UnitPrice )大于产品的公开报价,则提示相应的信息(利用的触发器完成此功能)。(5)保存功能:点击保存按钮时,将订单明细保存到数据库。2/26.(6)关闭功能: 点击关闭按钮时,如果订单明细有修改但没有保存,则提示是否关闭,如果不关闭则返回,否则关闭程序,如果没有修改,则直接关闭。四、实验要求1.订单查询实验要求使用 ADO.NET并任选一种程序设计语言进行编程。实验报告需要说明所采用的方法、结果和总结(结果分析)。实验方法部分说明采用的开发环境,包括操作系统、数据库管理系统及其版本、编程工具及其版本、和编程语言。如果使用

4、ADO.NET则在实验方法部分回答下面的问题:( 1) 使用哪种数据提供程序?( 2) 使用的数据连接对象是哪一个?连接对象是如何建立的?最后生成的连接对象中的连接字符串是什么?代表什么含义?( 3) 使用的数据适配器对象是什么?其中的查询或更新语句是什么?如果有参数则参数是如何处理的?( 4) 使用的数据集对象是什么?数据集中有哪些数据表?数据表是由哪些适配器对象生成的?(或采用其它方法)。实验方法中还需要给出手工添加的代码及对代码的说明。实验结果部分给出程序运行的界面和操作的简单说明。总结部分对实验过程中出现的总是进行分析,同时提出所开发的程序还有哪些可以改进的地方。五、实验步骤实验方法:

5、回答实验要求中的实验问题( 1)使用哪种数据提供程序?答: OLEDB类数据。( 2)使用的数据连接对象是哪一个?连接对象是如何建立的?最后生成的连接对象中3/26.的连接字符串是什么?代表什么含义?答:连接对象 oleDbConnection1数据适配器: oleDbDataAdapter1 和 oleDbDataAdapter2oleDbDataAdapter1Provider=SQLNCLI11( 客户端组件,代表一个驱动)DataSource=LENOVO-PC(代表数据源是 LENOVO-PC)Security=SSPI( 代表以 window 用户登录服务器 )Initial Ca

6、tlog=AdventureWorks( 代表连接数据库为AdventureWorks)oleDbDataAdapter2Provider=SQLNCLI11( 客户端组件,代表一个驱动)DataSource=LENOVO-PC(代表数据源是 LENOVO-PC)Security=SSPI( 代表以 window 用户登录服务器 )Initial Catlog=AdventureWorks( 代表连接数据库为AdventureWorks)( 3)使用的数据适配器对象是什么?其中的查询或更新语句是什么?如果有参数则参数是如何处理的?答: oleDbDataAdapter1:1)查询语句:SELE

7、CTSalesOrderID,OrderDate,DueDate,ShipDate,Status,SalesOrderNumberFROMSales.SalesOrderHeader2)没有参数OleDbDataAdapter2:1)查询语句:4/26.SELECTSalesOrderID,SalesOrderDetailID,CarrierTrackingNumber,OrderQty, ProductID, SpecialOfferID, UnitPrice,UnitPriceDiscount, LineTotal, rowguid, ModifiedDateFROMSales.Sales

8、OrderDetail2)没有参数( 4)使用的数据集对象是什么?数据集中有哪些数据表?数据表是由哪些适配器对象生成的?(或采用其它方法)。答: dataSet11-SalesOrderHeader 表 -oleDbDataAdapter1dataSet21-SalesOrderDetail 表 -oleDbDataAdapter21. 基本框架设计介绍1.1 新建一个项目客户管理4.0 ,选择的参数如下5/26.1.2 打开新建的项目客户管理4.01.3 窗口进行如下图所示的设计订单:使用dataGridView 创建,名字设置为dataGridView1Datasource:dataSet

9、11Datamember:SalesOrderHeader订单明细:使用datagridview 创建,名字设置为dataGridView2Datasource:dataSet21Datamember:SalesOrderDetailoleDbConnection1: 连接数据库AdventureWorksoleDbDataAdapter1-dataSet11oleDbDataAdapter2-dataSet216/26.填充 dataGrid控件: dataGridView1和 dataGridView2privatevoid Form1_Load( objectsender,EventAr

10、gs e)oleDbDataAdapter1.Fill(dataSet11);oleDbDataAdapter2.Fill(dataSet21);1.4 数据库环境设置连接 SQL Server 中的默认数据库AdventureWorks2. 查询功能的实现2.1 实现功能代码privatevoid dataGridView1_CellContentClick(objectsender,DataGridViewCellEventArgse)stringmsg = dataGridView1e.ColumnIndex, e.RowIndex.Value.ToString();StringstrC

11、ustomerDelete =Select * FROM Sales.SalesOrderDetail WHERESalesOrderID =+ msg;Console .Write(strCustomerDelete);this .dataSet21.Clear();/ 刷新this .oleDbDataAdapter2.Fill(this .dataSet21);/ 填充2.2 查询 SalesOrderID=43661 的所有订单明细7/26.3. 删除功能的实现3.1 实现功能代码3.2 如图删除 SalesOrderID=43661,SalesOrderDetailID=15的订单,

12、结果如下点击 43661 后查询结果如下选择 43661 中 SalesOrderDetailID=15 的一行并点击删除按钮,则删除这行数据,如下图所示:8/26.4.插入功能的实现4.1 实验指导书中已经给出介绍, SalesOrderDetail 的 rowguid 列是一个 uniqueidentifier 类型, 不允许空值。 手工输入该值比较困难, 可以使用程序进行处理。 即手工输入时不输入该值,保存到数据库之前由程序生成该列的值。4.2 如下图在SalesOrderID=43661 的订单明细的最下方添加一行新的订单没有插入新的订单之前的位置9/26.插入如图所示的新订单信息5.

13、更新功能的实现5.1 在 AdventureWorks 数据库中创建表Production.ProductUpdateLog,用来记录订单编号、订单明细编号、 产品编号、 产品的公开报价、 修改前产品的单价、 修改后产品的单价、修改者的登录名SQL语句如下:CREATETABLEProduction . ProductUpdateLog (记录编号intIDENTITY PRIMARYkey, - - 保证编号唯一,且随插入数据的数据逐一递增订单编号intnotnull,10/26.订单明细编号intnot null,产品编号intnotnull,产品的公开报价money,修改前产品的单价mo

14、ney,修改后产品的单价money,修改者的登录名varchar ( 30) notnull)GO创建的表如下图所示:5.2创建名为 Product.ProductUpdateCheck的存储过程,来向表Production.productUpdateLog中插入数据,实现代码如下USE AdventureWorksGOIF OBJECT_ID(Production.Record_Update_Price,P)IS NOT NULLDROP PROCEDURE Production.Record_Update_Price11/26.GO- 如果数据库中存在名称为Production.Recor

15、d_Update_Price的存储过程- 则删除该存储过程- 创建存储过程Production.Record_Update_Price,它有个参数,- 其中 SalesorderID表示订单编号,SalesorderdetailID表示订单明细编号-ProductID表示产品编号,PublicPrice表示公开报价-PrePrice表示修改前价格,PostPrice表示修改后报价-Operator表示修改者登录名CREATE PROCEDURE Production.Record_Update_Price-RecordID int,- 因为表格ProductUpdateLog的主键设为IDEN

16、TITY 性质 , 不用传参SalesorderID int,SalesorderdetailID int, ProductID int,PublicPrice money, PrePrice money,PostPrice money, Operator nvarchar(50)AS- 向表 ProductUpdateLog插入一条记录 , 参数纷纷对应INSERT INTO Production.ProductUpdateLog(- 记录编号 ,订单编号 ,订单明细编号 ,产品编号 ,12/26.产品公开报价 ,修改前产品单价,修改后产品单价,修改者登录名)VALUES(-RecordID

17、,SalesorderID,SalesorderdetailID, ProductID,PublicPrice, PrePrice,PostPrice, Operator)GOUSE AdventureWorksGOIF OBJECT_ID(Production.Record_Update_Price,P)IS NOT NULLDROP PROCEDURE Production.Record_Update_PriceGO- 如果数据库中存在名称为Production.Record_Update_Price的存储过程- 则删除该存储过程- 创建存储过程Production.Record_Upda

18、te_Price,它有个参数,- 其中 SalesorderID表示订单编号,SalesorderdetailID表示订单明细编号-ProductID表示产品编号,PublicPrice表示公开报价-PrePrice表示修改前价格,PostPrice表示修改后报价13/26.-Operator表示修改者登录名CREATE PROCEDURE Production.Record_Update_Price-RecordID int,- 因为表格ProductUpdateLog的主键设为IDENTITY 性质 , 不用传参SalesorderID int,SalesorderdetailID int

19、, ProductID int,PublicPrice money, PrePrice money,PostPrice money, Operator nvarchar(50)AS- 向表 ProductUpdateLog插入一条记录 , 参数纷纷对应INSERT INTO Production.ProductUpdateLog(- 记录编号 ,订单编号 ,订单明细编号 ,产品编号 ,产品公开报价 ,修改前产品单价,修改后产品单价,修改者登录名)VALUES(-RecordID,SalesorderID,SalesorderdetailID, ProductID,14/26.PublicPri

20、ce, PrePrice,PostPrice, Operator)GO5.3 建立名为Sales.Price_Update的触发器实现代码如下:USE AdventureWorksGO- 如果已经存在名为Sales.Price_Update的触发器 , 则删除它IFOBJECT_ID(Sales.Price_Update,TR)ISNOT NULLDROP TRIGGER Sales.Price_UpdateGO- 在表 Sales.SalesOrderDetail的 Update 操作上创建-Insteadof 触发器 Sales.Price_UpdateCREATE TRIGGER Sal

21、es.Price_UpdateON Sales.SalesOrderDetailINSTEAD OFUpdateAS- 当更新插入记录的更新价格UnitPrice大于- 产品的公开报价时- 调用 RAISERROR报错,进行操作回滚IF(EXISTS(SELECT I.UnitPriceFROM Production.ProductP,insertedIWHERE I.UnitPriceP.ListPriceAND P.ProductID=I.ProductID)BEGINRAISERROR(修改的产品单价不能大于产品的公开报价!,10, 1)ROLLBACK TRANSACTIONEND15

22、/26.- 如果符合更新价格不大于公开报价的条件- 则调用存储过程 Production.Record_Update_PriceELSE BEGIN- 声明相对应的个参数,数据类型一致对应DECLARE SalesorderIDint,SalesorderdetailIDint,ProductIDint,ListPricemoney,PreUnitPricemoney,PostUnitPricemoney,Operatornvarchar(50)- 订单编号、订单明细编号、产品编号及产品修改后价格- 皆取自表 inserted 相对应值SELECT SalesorderID=SalesOrde

23、rID,SalesorderdetailID=SalesOrderDetailID,ProductID=ProductID,PostUnitPrice=UnitPriceFROM inserted- 产品公开报价取自表Production.Product的 ListPriceSELECT ListPrice=ListPriceFROM Production.ProductPWHERE P.ProductID=(SELECT ProductIDFROM inserted)- 执行更新操作,将表Sales.SalesOrderDetail所对应的记录的-UnitPrice值更新UPDATE Sal

24、es.SalesOrderDetailSETUnitPrice=PostUnitPrice=SalesorderID=SalesorderdetailID- 修改前的产品价格取自表中deleted- 表 Sales.SalesOrderDetail对应被删除的记录UnitPrice16/26.SELECT PreUnitPrice=UnitPriceFROM deletedDWHERE D.ProductID=(SELECT ProductIDFROM inserted)- 获取当前修改者登录名- 在网上搜到了这个系统内置函数SELECT Operator=SYSTEM_USER- 将个参数对

25、应位置传入存储过程Production.Record_Update_PriceEXECUTE Production.Record_Update_PriceSalesorderID,SalesorderdetailID,ProductID,ListPrice,PreUnitPrice,PostUnitPrice,Operator- 提示已经进入存储过程PRINTHERECOMES APROCEDURE.ENDGO创建的触发器如下图所示:5.4 在订单明细中修改一行中的一个数据,如输入的单价(UnitPrice )不符合产品的公开报价范围时,窗口会出现提示,并组织修改的保存17/26.6.保存功能

26、的实现6.1 保存功能实现代码privatevoid button2_Click(objectsender,EventArgs e)try/ 检查数据表各行,设置新行的 rowguid 列foreach ( DataRow dataRow in/ 如果是新行if(dataRow.RowState =DataRowState .Added)/ 如果 rowguid 列的值是空值if(dataRow rowguid .Equals(System.DBNull .Value)dataRowrowguid =Guid.NewGuid();18/26.this .oleDbDataAdapter2.Up

27、date(this .dataSet21.SalesOrderDetail);MessageBox.Show( 保存成功 ! );catch ( Exceptionex)MessageBox.Show( 保存失败 !n+ ex.Message);6.2 功能实现结果如下 图, 把SalesOrderID=43863&SalesOrderDetailID=671的 D0C0-435D-A2 修改 成D0C0-435D-B2修改后点击保存按钮,结果如图所示19/26.再次查询这个 SalesOrderID=43863&SalesOrderDetailID=671 的订单明细,可以看到已经保存到数据

28、库了7.关闭功能的实现7.1 关闭功能实现代码privatevoid button3_Click(objectsender,EventArgs e)bool Save_Flag =true ;/定义一个波尔变量save_flagfor ( inti = 0; i / 全局扫描,判断是否有修改20/26.ifDataRowState .Unchanged)Save_Flag =false ;break ;if(Save_Flag =false )if( DialogResult.Yes = MessageBox.Show( 是否要保存对订单明细的更改? , 提示 , MessageBoxButt

29、ons .YesNo)/ 若确定则关闭窗口不保存更改数据,否则回到原来窗口this .Close();else/若没有更改则直接关闭this .Close();7.2 关闭功能实现结果若不更改任何数据或者已经点击保存按钮,则窗口直接关闭21/26.若更改数据而没有点击保存按钮,则会弹出提示窗口,提示你订单明细已经更改,是否确认退出若点否,则回到原来的订单表窗口中若点击是,则不保存到数据库并且关闭窗口再次运行程序,查看SalesOrderID=43659&SalesOrderDetailID=4 的订单是否已经保22/26.存,结果如下:很明显没有保存实验结果:实验中六个基本功能如查询、插入、删

30、除、保存、更新和关闭已经实现了,可以通过对订单中的某个订单进行所有历史订单的查询, 并通过订单明细窗口把所以信息显示出来;可以对订单明细最后一行进行插入一行新的订单数据;可以在订单明细表中选择一行数据点击删除按钮, 把那行订单数据一整行删除;可以对更改的数据进行处理并保存到数据库;可以更新功能,如若是输入单价超出规定的报价,则会报错,无法进行保存;可以关闭窗口,若是订单明细的数据已经更改而没有保存,则会弹出窗口提示“订单明细更改,是否确认退出”,若是已经保存或者是没有更改订单明细的数据,而可以直接关闭窗口不会出现提示窗口。结果分析:查询功能:需要从订单中获取信息并在订单明细中显示出来,实验中,

31、我使用的是23/26.dataGridView ,可以直接双击 dataGridView1 进入到代码窗口 (form1.cs) ,输入要写的代码,实现功能,也可以在 dataGridView 的属性中使用 mouseclick 建立一个函数,也可以实现这个查询的功能;插入功能:刚开始实现这个功能时,总是报错,仔细看了实验指导书,才发现是 rowguid 出现的问题,然后就可以进行插入了;删除功能:双击删除按钮进入到代码编辑窗口, 输入代码进行调试, 代码没有问题,删除功能实现;保存功能:双击保存功能按钮进入到代码编辑窗口,输入代码调试运行,解决出现的 bug,实现保存功能;更新功能:在数据库 AdventureWorks 中进行操作,建表、插入存储、创建触发器,实现更新功能;关闭功能:先全局搜索判断订单明细是否更改,然后把结果返回到波尔变量Save_flag中,然后根据 Save_flag ,若是 false ,则弹出提示窗口, 否则直接关闭窗口;可以改进的功能:查询功能:可以直接输入相关信息直接查询所有的订单明细插入功能:提示插入格式删除功能:删除前弹出窗口进行删除确认保存功能:每次保存提示”保存成功”更新功能:可以在选择上增加功能若选否则保存关闭,若选是则直接关闭关闭功能:可以查询修改的订单明细六、实验感悟24/26

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!