在ASP.NET 2.0中操作数据之二十一:实现开放式并发(6)

  完成了DAL和BLL后,剩下的工作就是创建一个能利用系统中内建的开放式并发逻辑的ASP.NET页面。特别地,数据 Web 服务器控件(GridView,DetailsView或FormView)必须记住它的原始值,并且ObjectDataSource必须同时传送这两套值到业务逻辑层。此外,ASP.NET页面必须加以配置从而适当地处理并发冲突。

  首先,打开EditInsertDelete文件夹中的OptimisticConcurrency.aspx页面,添加一个GridView控件到设计器,设置它的ID属性为ProductsGrid。从GridView的职能标记里,选择创建一个新的ObjectDataSource名为ProductsOptimisticConcurrencyDataSource。既然我们希望这个ObjectDataSource使用支持开放式并发的DAL,就把它配置为使用ProductsOptimisticConcurrencyBLL对象。

/uploads/allimg/200612/1KH93592_0.png

图 13: 该ObjectDataSource使用ProductsOptimisticConcurrencyBLL对象

  在向导中从下拉列表选择GetProducts,UpdateProduct,和DeleteProduct方法。对UpdateProduct方法,则使用接受所有产品数据字段的重载。

  配置ObjectDataSource控件的属性

  完成了向导之后,该ObjectDataSource的声明标记应该如下:

<asp:ObjectDataSource runat="server" DeleteMethod="DeleteProduct" OldValuesParameterFormatString="original_{0}" SelectMethod="GetProducts" TypeName="ProductsOptimisticConcurrencyBLL" UpdateMethod="UpdateProduct"> <DeleteParameters> <asp:Parameter Type="Int32" /> <asp:Parameter Type="String" /> <asp:Parameter Type="Int32" /> <asp:Parameter Type="Int32" /> <asp:Parameter Type="String" /> <asp:Parameter Type="Decimal" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Boolean" /> </DeleteParameters> <UpdateParameters> <asp:Parameter Type="String" /> <asp:Parameter Type="Int32" /> <asp:Parameter Type="Int32" /> <asp:Parameter Type="String" /> <asp:Parameter Type="Decimal" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Boolean" /> <asp:Parameter Type="Int32" /> <asp:Parameter Type="String" /> <asp:Parameter Type="Int32" /> <asp:Parameter Type="Int32" /> <asp:Parameter Type="String" /> <asp:Parameter Type="Decimal" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Int16" /> <asp:Parameter Type="Boolean" /> <asp:Parameter Type="Int32" /> </UpdateParameters> </asp:ObjectDataSource>

  正如你所看到的,DeleteParameters集合包含了对应ProductsOptimisticConcurrencyBLL类的DeleteProduct方法的每一个输入参数的Parameter实例。同样地,UpdateParameters集合也包含了对应UpdateProduct每一个输入参数的Parameter实例。在先前的那些关于数据修改的教程中,我们在这里都会移除ObjectDataSource的OldValuesParameterFormatString属性,因为这个属性需要BLL方法既要求传入原始值也要求传入修改后的值。此外,这个属性还需要对应原始值的输入参数的名称。既然我们现在要把原始值传送到BLL,那就不要 删除这个属性。

  注意:OldValuesParameterFormatString属性的值必须映射到BLL里接收原始值的输入参数的名称。因为我们把这些参数命名为original_productName,original_supplierID, 等等,我们可以让OldValuesParameterFormatString属性的值依旧是original_{0}。然而如果BLL方法的输入参数名为的old_productName,old_supplierID等等,那么,你不得不把OldValuesParameterFormatString属性的值改为old_{0}。为了ObjectDataSource能够正确地将原始值传送到BLL方法,还有最后一个属性需要设置。ObjectDataSource有一个 ConflictDetection属性,它可以设定为下面的 下面两个值之一:  

OverwriteChanges – 默认值; 不将原始值发送到BLL方法相应的输入参数       

CompareAllValues – 将原始值发送到BLL方法;当使用开放式并发时使用这一项

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwwsj.html