




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、For pers onal use only in study and research; not for commercial useFor pers onal use only in study and research; not for commercial use实验报告姓名:学号:班级:实验:订单管理时间:2017 年9月28日实验目的实验条件实验内容四、实验要求五、实验步骤六、实验感悟目录(通过实验要达到什么样的效果,学到什么东西)(实验使用软件)(实验需要做的具体详细的实验项目)(实验中,我们要注意的实验事项和写实验报告的详细要求)(实验步骤包括具体的每个实验的实验方法、实验结果
2、和实验结果分,按照每步遇到的问题,进行分析解决)(总结实验中遇到的问题,以后该怎么解决)、实验目的学习数据库应用程序的开发和实现部分功能(查询、插入、删除、更新和保存等)、实验条件Microsoft SQL Server Management StudioMicrosoft Visual StudioWindows 8C#编程语言三、实验内容编程实现示例数据库中订单明细 SalesOrderDetail 的查询、 插入、 更新与删除功能如下:(1)查询功能。程序运行后,订单表中显示所有订单,第一个订单为当前订单,订单 明细表中显示当前订单的所有订单明细。 当前订单发生改变时 (即点击订单表中的
3、某个订单 埋),订单明细表中的内容发生相应的变化。(2)删除功能:选取订单明细中的一行,点击删除,选择的订单明细从表中删除,但 并不真正从数据库中删除。(3)插入功能:可以在订单明细表的最后输入新的订单明细。(4)更新功能: 可以修改订单明细表中的某一行的内容。如果输入的单价 ( UnitPrice )大于产品的公开报价,则提示相应的信息(利用 4.6.2 的触发器完成此功能)。5)保存功能:点击保存按钮时,将订单明细保存到数据库。(6)关闭功能: 点击关闭按钮时, 如果订单明细有修改但没有保存, 则提示是否关闭, 如果不关闭则返回,否则关闭程序,如果没有修改,则直接关闭。四、实验要求1. 订
4、单查询实验要求使用ADO.NET并任选一种程序设计语言进行编程。实验报告需要说明所采用的方法、结果和总结(结果分析)。实验方法部分说明采用的开发环境,包括操作系统、数据库管理系统及其版本、编程 工具及其版本、和编程语言。如果使用 ADO.NET则在实验方法部分回答下面的问题:( 1) 使用哪种数据提供程序?(2)使用的数据连接对象是哪一个?连接对象是如何建立的?最后生成的连接对象 中的连接字符串是什么?代表什么含义?(3)使用的数据适配器对象是什么?其中的查询或更新语句是什么?如果有参数则 参数是如何处理的?(4)使用的数据集对象是什么?数据集中有哪些数据表?数据表是由哪些适配器对 象生成的?
5、(或采用其它方法)。实验方法中还需要给出手工添加的代码及对代码的说明。实验结果部分给出程序运行的界面和操作的简单说明。总结部分对实验过程中出现的总是进行分析,同时提出所开发的程序还有哪些可以改 进的地方。五、实验步骤实验方法:回答实验要求中的实验问题(1)使用哪种数据提供程序?答:OLED类数据。(2)使用的数据连接对象是哪一个?连接对象是如何建立的?最后生成的连接对象中的连接字符串是什么?代表什么含义?答:连接对象 oleDbConnection1数据适配器: oleDbDataAdapter1 和 oleDbDataAdapter2oleDbDataAdapter1Provider=SQL
6、NCLI11( 客户端组件,代表一个驱动 )Data Source=LENOVO-PC(代表数据源是 LENOVO-PC)Security=SSPI( 代表以 window 用户登录服务器 )Initial Catlog=AdventureWorks( 代表连接数据库为 AdventureWorks)oleDbDataAdapter2Provider=SQLNCLI11(客户端组件,代表一个驱动)Data Source=LENOVO-PC(代表数据源是 LENOVO-PC) Security=SSPI(代表以window用户登录服务器) Initial Catlog=AdventureWork
7、s( 代表连接数据库为 AdventureWorks)( 3)使用的数据适配器对象是什么?其中的查询或更新语句是什么?如果有参数则参 数是如何处理的?答: oleDbDataAdapter1:1)查询语句:Status,SELECT SalesOrderID, OrderDate, DueDate, ShipDate,SalesOrderNumberFROM Sales.SalesOrderHeader2)没有参数OleDbDataAdapter2:1)查询语句:SELECTSalesOrderlD, SalesOrderDetaillD,CarrierTracki ngNumber,Orde
8、rQty, ProductID, SpecialOfferID, Uni tPrice,Un itPriceDisco unt, Lin eTotal, rowguid, ModifiedDate FROM Sales.SalesOrderDetail2)没有参数(4)使用的数据集对象是什么?数据集中有哪些数据表?数据表是由哪些适配器对象 生成的?(或采用其它方法)。答:dataSet11->SalesOrderHeader 表->oleDbDataAdapter1 dataSet21->SalesOrderDetail 表->oleDbDataAdapter21.基本
9、框架设计介绍1.1新建一个项目客户管理4.0,选择的参数如下1.2打开新建的项目客户管理4.01.3窗口进行如下图所示的设计 JP 叫-*FBflHuMi VCrCI £jfal. ipEKI1L加* Af1 jP tHim” 目、订单:使用 dataGridView创建,名字设置为 dataGridViewlDatasource:dataSet11Datamember:SalesOrderHeader订单明细:使用 datagridview创建,名字设置为dataGridView2Datasource:dataSet21Datamember:SalesOrderDetailoleD
10、bConnection1:连接数据库 AdventureWorksoleDbDataAd apter1->dataSet11 oleDbDataAd apter2->dataSet21填充 dataGrid 控件: dataGridView1 和 dataGridView2private void Form1_Load( object sender, EventArgs e)oleDbDataAdapter1.Fill(dataSet11);oleDbDataAdapter2.Fill(dataSet21);1.4 数据库环境设置连接 SQL Server 中的默认数据库 Adve
11、ntureWorks2. 查询功能的实现2.1 实现功能代码private void dataGridView1_CellContentClick( object sender, DataGridViewCellEventArgs e)string msg = dataGridView1e.ColumnIndex, e.RowIndex.Value.ToString();String strCustomerDelete = "Select * FROM Sales.SalesOrderDetail WHERESalesOrderID =" + msg;Console .Wr
12、ite(strCustomerDelete); oleDbDataAdapter2.SelectCommand.CommandText = strCustomerDelete;t his .dataSet21.Clear(); / 刷新this .oleDbDataAdapter2.Fill( this .dataSet21); / 填充2.2 查询 SalesOrderID=43661 的所有订单明细勺I BrW > IVHiil辰T| t*二書尹I JNV> fh VTM» WZJtT*«*】99 '" H /- r r v *# . Lt
13、 I- M .3.删除功能的实现3.1实现功能代码3.2 如图删除 SalesOrderlD=43661,SalesOrderDetaillD=15的订单,结果如下点击43661后查询结果如下选择43661中SalesOrderDetailID=15的一行并点击删除按钮,则删除这行数据,如下图所示:4插入功能的实现4.1实验指导书中已经给出介绍,SalesOrderDetail的rowguid列是一个 uniqueidentifier类型,不允许空值。手工输入该值比较困难,可以使用程序进行处理。即手工输入时不输入该值,保存到数据库之前由程序生成该列的值。4.2如下图在SalesOrderlD=
14、43661的订单明细的最下方添加一行新的订单没有插入新的订单之前的位置插入如图所示的新订单信息詁:=?E 4站La匸S i a=h. t kttj urrskcafil C rcluSBZ29543BS1IZlllFi.Z-hF5更新功能的实现5.1 在 AdventureWorks 数据库中创建表 Production.ProductUpdateLog ,用来记录订单 编号、订单明细编号、产品编号、产品的公开报价、修改前产品的单价、 修改后产品的单价、 修改者的登录名SQL语句如下:CREATETABLEProduction . ProductUpdateLog (记录编号int IDENT
15、ITY PRIMARYkey,-保证编号唯一,且随插入数据的数据逐一递增订单编号int not null,订单明细编号int not null,产品编号int not null,产品的公开报价 money修改前产品的单价 money修改后产品的单价 money修改者的登录名 varchar (30) not null)GO创建的表如下图所示:5.2 创建名为Product.ProductUpdateCheck 的存储过程,来向表Productio n. productUpdateLog中插入数据,实现代码如下USE Adve ntureWorksGOIF OBJECT_ID('Prod
16、uctio n.Record_Update_Price','P')IS NOT NULLDROP PROCEDURE Productio n.Record_Update_PriceGO - 如果数据库中存在名称为 Production.Record_Update_Price 的存储过程- 则删除该存储过程- 创建存储过程 Production.Record_Update_Price, 它有个参数 ,- 其中 SalesorderID 表示订单编号 ,SalesorderdetailID 表示订单明细编号-ProductID 表示产品编号 ,PublicPrice 表示公
17、开报价-PrePrice 表示修改前价格 ,PostPrice 表示修改后报价-Operator 表示修改者登录名CREATE PROCEDURE Production.Record_Update_Price-RecordID int,-因为表格ProductUpdateLog 的主键设为IDENTITY性质,不用传参SalesorderID int,SalesorderdetailID int, ProductID int,PublicPrice money, PrePrice money,PostPrice money, Operator nvarchar(50)AS- 向表 Produc
18、tUpdateLog 插入一条记录 , 参数纷纷对应INSERT INTO Production.ProductUpdateLog(- 记录编号 ,订单编号 ,订单明细编号 , 产品编号 ,产品公开报价 , 修改前产品单价 ,修改后产品单价 , 修改者登录名)VALUES(-RecordID,SalesorderID,SalesorderdetailID, ProductID,PublicPrice, PrePrice,PostPrice, Operator)GOUSE AdventureWorksGOIF OBJECT_ID('Production.Record_Update_Pri
19、ce','P')IS NOT NULLDROP PROCEDURE Production.Record_Update_PriceGO- 如果数据库中存在名称为 Production.Record_Update_Price 的存储过程- 则删除该存储过程- 创建存储过程 Production.Record_Update_Price, 它有个参数 ,- 其中 SalesorderID 表示订单编号 ,SalesorderdetailID 表示订单明细编号 -ProductID 表示产品编号 ,PublicPrice 表示公开报价-PrePrice 表示修改前价格 ,Post
20、Price 表示修改后报价-Operator 表示修改者登录名CREATE PROCEDURE Production.Record_Update_Price-RecordID int,-因为表格ProductUpdateLog 的主键设为IDENTITY性质,不用传参SalesorderID int,SalesorderdetailID int, ProductID int,PublicPrice money, PrePrice money,PostPrice money, Operator nvarchar(50)AS- 向表 ProductUpdateLog 插入一条记录 , 参数纷纷对应
21、INSERT INTO Production.ProductUpdateLog(- 记录编号 ,订单编号 ,订单明细编号 , 产品编号 ,产品公开报价 , 修改前产品单价 ,修改后产品单价 , 修改者登录名)VALUES(-RecordID,SalesorderID, SalesorderdetailID, ProductID,PublicPrice, PrePrice,PostPrice, Operator)GO5.3 建立名为 Sales.Price_Update 的触发器实现代码如下:USE AdventureWorksGO- 如果已经存在名为 Sales.Price_Update 的触
22、发器 , 则删除它IF OBJECT_ID('Sales.Price_Update','TR')IS NOT NULLDROP TRIGGER Sales.Price_UpdateGO- 在表 Sales.SalesOrderDetail 的 Update 操作上创建-Insteadof 触发器 Sales.Price_UpdateCREATE TRIGGER Sales.Price_UpdateON Sales.SalesOrderDetailINSTEAD OF UpdateAS- 当更新插入记录的更新价格 UnitPrice 大于- 产品的公开报价 Pro
23、duction.Product.ListPrice 时-调用RAISERR0报错,进行操作回滚IF(EXISTS( SELECT I.UnitPriceFR0M Production.Product P, inserted IWHERE I.UnitPrice > P.ListPrice AND P.ProductID = I.ProductID)BEGINRAISERROR修改的产品单价不能大于产品的公开报价!',10, 1)R0LLBACK TRANSACTI0NEND- 如果符合更新价格不大于公开报价的条件- 则调用存储过程 Production.Record_Update
24、_Price ELSEBEGIN- 声明相对应的个参数,数据类型一致对应 DECLARE SalesorderID int,SalesorderdetailID int,ProductID int,ListPrice money, PreUnitPrice money, PostUnitPrice money, Operator nvarchar(50)- 订单编号、订单明细编号、产品编号及产品修改后价格- 皆取自表 inserted 相对应值SELECT SalesorderID = SalesOrderID,SalesorderdetailID = SalesOrderDetailID,P
25、roductID = ProductID,PostUnitPrice = UnitPriceFROM inserted- 产品公开报价取自表 Production.Product 的 ListPriceSELECT ListPrice = ListPriceFROM Production.Product PWHERE P.ProductID = (SELECT ProductIDFROM inserted)- 执行更新操作,将表 Sales.SalesOrderDetail 所对应的记录的-UnitPrice 值更新UPDATE Sales.SalesOrderDetailSET UnitPr
26、ice = PostUnitPriceWHERE Sales.SalesOrderDetail.SalesOrderID = SalesorderIDAND Sales.SalesOrderDetail.SalesOrderDetailID = SalesorderdetailID- 修改前的产品价格取自表中 deleted- 表 Sales.SalesOrderDetail 对应被删除的记录 UnitPriceSELECT PreUnitPrice = UnitPriceFROM deleted DWHERE D.ProductID =(SELECT ProductIDFROM in ser
27、ted-获取当前修改者登录名-在网上搜到了这个系统内置函数SELECT Operator = SYSTEM_USER-将个参数对应位置传入存储过程Production.Record_Update_PriceEXECUTE Productio n.Record_Update_Price SalesorderlD,SalesorderdetaillD,ProductID, ListPrice,Pre Un itPrice,PostU nitPrice,Operator-提示已经进入存储过程PRINT 'HERE COMES A PROCEDURE.'ENDGO创建的触发器如下图所示
28、:5.4在订单明细中修改一行中的一个数据,如输入的单价(UnitPrice )不符合产品的公开报价范围时,窗口会出现提示,并组织修改的保存6保存功能的实现6.1保存功能实现代码private void butt on 2_Click( object sen der.Eve ntArgs e)try/检查数据表各行,设置新行的rowguid列foreach ( DataRowdataRow in this .dataSet21.SalesOrderDetail.Rows)/如果是新行if (dataRow.RowState = DataRowState .Added)/如果rowguid列的值是
29、空值if (dataRow "rowguid" .Equals(System. DBNull .Value)dataRow"rowguid" = Guid.NewGuid();this .0leDbDataAdapter2.Update( this .dataSet21.SalesOrderDetail);MessageBoxShow("保存成功!");catch ( Exception ex)MessageBoxShow("保存失败!n" + ex.Message);6.2功能实现结果如下图,把 SalesOrd
30、erlD=43863&SalesOrderDetaillD=671的 D0C0-435D-A2 修改成D0C0-435D-B2修改后点击保存按钮,结果如图所示fl*弍也gqr血XDIPHzJLL/f/LZQCI/T/132d I/"aOEl/T/13zdjll/t/lanuz4336tibLL/T/E.筮i iZ*<>7iiit-ECih- -id-rr kt u- r6TZrarnGtET*Lkaa&a6T3KCWD-K!LSuibeTt-im-IIprurSus i rIB; 1 J再次查询这个 SalesOrderlD=43863&Sales
31、OrderDetaillD=671的订单明细,可以看到已经保存到数据库了7关闭功能的实现7.1关闭功能实现代码private void butt on 3_Click(object sen der,Eve ntArgs e)bool Save_Flag = true ;/ 定义一个波尔变量 save_flagfor ( int i = 0; i < this .dataSet21.SalesOrderDetail.Rows.Count; i+)/全局扫描,判断是否有修改if (this .dataSet21.SalesOrderDetail.Rowsi.RowState !=DataRo
32、wState. Un cha nged)Save_Flag =false ;break;if (Save_Flag = false )if (DialogResult .Yes = MessageBoxShow(" 是否要保存对订单明细的更改?","提示",MessageBoxButtons.YesNo)/若确定则关闭窗口不保存更改数据,否则回到原来窗口this .Close();else /若没有更改则直接关闭this .Close();7.2关闭功能实现结果若不更改任何数据或者已经点击保存按钮,则窗口直接关闭若更改数据而没有点击保存按钮,则会弹出提示
33、窗口,提示你订单明细已经更改,是否确认退出4911-403C-98 -> 4911-403C'669.-H 1若点否,则回到原来的订单表窗口中于*ir畔伞 話,个1F:o>rv I <.卜ShiiiiS3* 勿 *之I 卿闷M|Uhll甘冋审 =*!*311 七« W«*tkoJkid血區:" 1.1歳 iLMliMil 旳 LI淙冷k»9l.m: i iid-ihe 脚1k:Sfci A «*»_r-l-!_h.pl i.'h(亠R-4uw*rjinirrL4tlg血出|lf 11 bI-|弹雋*|
34、-eR>Ah«c Ytts 寺m韦N .pii ->-| QWJwm"歩比iz 3若点击是,则不保存到数据库并且关闭窗口再次运行程序,查看SalesOrderlD=43659&SalesOrderDetaillD=4的订单是否已经保存,结果如下:很明显没有保存实验结果:实验中六个基本功能如查询、插入、删除、保存、更新和关闭已经实现了,可以通 过对订单中的某个订单进行所有历史订单的查询,并通过订单明细窗口把所以信息显示出来;可以对订单明细最后一行进行插入一行新的订单数据;可以在订单明细表中选择 一行数据点击删除按钮,把那行订单数据一整行删除;可以对更改的数
35、据进行处理并保 存到数据库;可以更新功能,如若是输入单价超出规定的报价,则会报错,无法进行保 存;可以关闭窗口,若是订单明细的数据已经更改而没有保存,贝V会弹出窗口提示“订 单明细更改,是否确认退出”,若是已经保存或者是没有更改订单明细的数据,而可以 直接关闭窗口不会出现提示窗口。结果分析:查询功能:需要从订单中获取信息并在订单明细中显示出来,实验中,我使用的是 dataGridView ,可以直接双击 dataGridView1 进入到代码窗口 (form1.cs) ,输入要写的 代码,实现功能,也可以在 dataGridView 的属性中使用 mouseclick 建立一个函数,也 可以实现这个查询的功能;插入功能:刚开始实现这个功能时,总是报错,仔细看了实验指导书,才发现是rowguid 出现的问题,然后就可以进行插入了;删除功能: 双击删除按钮进入到代码编辑窗口, 输入代码进行调
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 报告撰写与公共关系学的试题及答案
- 公路货运行业数字化转型与效率提升:2025年物流金融创新发展研究报告
- 2025年工程经济经典试题及答案
- 信心满满2025年中级经济师考生试题及答案
- 2025年即时配送行业配送路径优化与成本控制技术路径报告
- 2025年智慧物流城市配送体系优化策略报告
- 动漫产业链协同创新与2025年产业政策环境优化报告
- 项目管理成功案例的试题及答案
- 协调与沟通的公共关系试题及答案
- 2025市政工程考试备考心理调适的重要性与试题及答案
- 硬件安全与防护概述
- 续签租房合同正式版模板
- 职工生育保险待遇申报表
- 10千伏及以下可研深度规定
- 加快建设教育强国专题课件ppt
- 燃气公司生产运营管理制度
- 新媒体数据分析高职PPT完整全套教学课件
- 肺功能检查考试试题
- 轻度运动损伤的自我处理
- 学管师薪资体系
- 尾矿库名词解释
评论
0/150
提交评论