在ASP.NET2.0中操作数据之十六:概述插入、更新和删除数据作者:heker2007字体:[增加减小]类型:转载时间:2016-05-06我要评论本文主要介绍ASP.NET中插入、更新和删除数据的原理,ObjectDataSource在页面和潜在的数据之间扮演一个代理的角色,配合业务逻辑可以执行Select()、Insert()、Update()和Delete()方法。导言结束前面的几节,我们已经探讨过了如何使用GridView、DetailsView和FormView控件来显示数据。这些控件简单地操作提供给它的数据。一般地,这些控件通过使用一个数据源控件,例如ObjectDataSource来存取数据。我们已经看过了ObjectDataSource是如何在ASP.NET页面和潜在的数据之间扮演一个代理的角色。当一个GridView需要显示数据时,它调用ObjectDataSource的Select()方法,这个方法转而调用一个来自我们的业务逻辑层(BLL)的方法,继而调用一个适当的数据访问层(DAL)的表适配器(TableAdapter)的方法,从而它发送一个SELECT查询到Northwind数据库。记得在我们的教程里当创建DAL中的表适配器时,VisualStudio自动地添加从潜在数据库插入、更新和删除数据的方法。此外,在创建一个业务逻辑层这一节我们已经设计了调用这些数据更改的DAL方法的BLL方法。除了它的Select()方法,ObjectDataSource还有Insert()、Update()和Delete()方法。跟Select()方法类似,这三个方法映射到一个隐含的对象。当配置插入、更新或删除数据时,GridView、DetailsView和FormView控件提供了一个修改潜在的数据的用户界面。这个用户界面调用ObjectDataSource的Insert()、Update()和Delete()方法,它们继而调用隐含对象的关联方法(见图1)。图1:ObjectDataSource的Insert()、Update()和Delete()方法提供一个到BLL的代理本节我们将看看如何映射ObjectDataSource的Insert()、Update()和Delete()方法到BLL中的类,也看看如何配置GridView、DetailsView和FormView控件提供修改数据的功能。第一步:创建Insert、Update和Delete教程页面在我们开始探讨如何插入、修改和删除数据之前,让我们先花些时间在我们的站点项目里添加这些本节里和下一节里需要的ASP.NET页面。首先添加一个名为EditInsertDelete的新文件夹。然后,在这个文件夹里添加下面这些ASP.NET页面,并且确认每个页面都关联Site.master母版页:·Default.aspx·Basics.aspx·DataModificationEvents.aspx·ErrorHandling.aspx·UIValidation.aspx·CustomizedUI.aspx·OptimisticConcurrency.aspx·ConfirmationOnDelete.aspx·UserLevelAccess.aspx图2:添加这些与数据更改关联的教程的页面类似在其它文件夹里,EditInsertDelete文件夹里的Default.aspx将列出这些教程章节。记得用户控件提供这个功能。因此,从解决方案资源管理器中拖拽一个这个用户控件到页面的设计视图,从而添加它到Default.aspx页面。图3:添加SectionLevelTutorialListing.ascx用户控件到tDefault.aspx页面最后,添加这些页面地址项到Web.sitemap文件。明确地,在CustomizedFormattingsiteMapNode后添加如下标记:?1234567891011121314siteMapNodetitle=Editing,Inserting,andDeletingurl=~/EditInsertDelete/Default.aspxdescription=SamplesofReportsthatProvideEditing,Inserting,andDeletingCapabilitiessiteMapNodeurl=~/EditInsertDelete/Basics.aspxtitle=Basicsdescription=ExaminesthebasicsofdatamodificationwiththeGridView,DetailsView,andFormViewcontrols./siteMapNodeurl=~/EditInsertDelete/DataModificationEvents.aspxtitle=DataModificationEventsdescription=ExplorestheeventsraisedbytheObjectDataSourcepertinenttodatamodification./siteMapNodeurl=~/EditInsertDelete/ErrorHandling.aspxtitle=ErrorHandlingdescription=Learnhowtogracefullyhandleexceptionsraisedduringthedatamodificationworkflow./siteMapNodeurl=~/EditInsertDelete/UIValidation.aspxtitle=AddingDataEntryValidationdescription=Helppreventdataentryerrorsbyprovidingvalidation./1516171819202122232425262728293031323334siteMapNodeurl=~/EditInsertDelete/CustomizedUI.aspxtitle=CustomizetheUserInterfacedescription=Customizetheeditingandinsertinguserinterfaces./siteMapNodeurl=~/EditInsertDelete/OptimisticConcurrency.aspxtitle=OptimisticConcurrencydescription=Learnhowtohelppreventsimultaneoususersfromoverwrittingoneanotherschanges./siteMapNodeurl=~/EditInsertDelete/ConfirmationOnDelete.aspxtitle=ConfirmOnDeletedescription=Promptauserforconfirmationwhendeletingarecord./siteMapNodeurl=~/EditInsertDelete/UserLevelAccess.aspxtitle=LimitCapabilitiesBasedonUserdescription=Learnhowtolimitthedatamodificationfunctionalitybasedontheuserroleorpermissions.//siteMapNode在更新了Web.sitemap后,花些时间通过浏览器访问本教程站点。左边的菜单里现在包含对应编辑、插入和删除教程的项。图4:站点地图现在包含了对应编辑、插入和删除教程的项第二步:添加并配置ObjectDataSource控件因为GridView、DetailsView和FormView控件在数据修改功能和版面上都有所不同,就让我们逐个研究。不过,与其让这三个控件各自使用自己的ObjectDataSource,还不如让我们仅创建一个ObjectDataSource让这个三个控件的例子共用。打开Basics.aspx页面,从工具箱拖拽一个ObjectDataSource到设计器,从它的职能标记中点击配置数据源链接。因为ProductsBLL类是唯一一个提供修改、插入和删除方法的BLL类,配置该ObjectDataSource使用这个类。图5:配置ObjectDataSource使用ProductsBLL类在下一屏中,通过选择适当的tab页并从下拉列表中选择方法,我们可以指定ProductsBLL类里的哪些方法被映射到ObjectDataSource的Select()、Insert()、Update()和Delete()方法。图6,至今我们应该很熟悉,映射ObjectDataSource的Select()方法到ProductsBLL类的GetProducts()方法。Insert()、Update()和Delete()方法可以通过选择上方的适当的tab页进行配置。图6:让这个ObjectDataSource返回所有产品图7、8和9显示ObjectDataSource的UPDATE、INSERT,和DELETE的tab页。配置它们从而Insert()、Update()和Delete()方法分别调用ProductsBLL类的UpdateProduct、AddProduct和DeleteProduct方法。图7:映射ObjectDataSource的Update()方法到ProductBLL类的UpdateProduct方法图8:映射ObjectDataSource的Insert()方法到ProductBLL类的AddProduct方法图9:映射ObjectDataSource的Delete()方法到ProductBLL类的DeleteProduct方法你也许已经注意到在UPDATE、INSERT和DELETE的tab页里的下拉列表中已经选择了各自的方法。这是由于我们使用了DataObjectMethodAttribute,它修饰了ProducstBLL类。例如,DeleteProduct方法是如下这样子声明的:?123456[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Delete,true)]publicboolDeleteProduct(intproductID){...}DataObjectMethodAttribute指示每一个方法的目的–是否为了查询、插入、更新或删除–是否它的默认值。如果你在创建BLL类的时候省略了这些属性,现在你将需要手工从UPDATE、INSERT和DELETE的tab页里手工选择方法。当确认已经适当的ProductsBLL方法映射到ObjectDataSource的Insert()、Update()和Delete()方法后,点击完成结束此向导。检查ObjectDataSource的标记在通过数据源配置向导完成了对ObjectDataSource的配置之后,到源视图去检查一下生成的声明标记。asp:ObjectDataSource标签列明了隐含的对象和需要调用的方法。另外,还有DeleteParameters、UpdateParameters和InsertParameters,它们映射ProductsBLL类的AddProduct、UpdateProduct和DeleteProduct方法的输入参数:?12345678910111213141516171819202122232425262728asp:ObjectDataSourceID=ObjectDataSource1runat=serverDeleteMethod=DeleteProduc