41-实现开放式并发.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
对于可能存在多用户同时更新或删除数据的web程序来说,存在一个用户的修改覆盖另一个用户的情况。当设计这样的程序时,选择适当的并发控制技术非常重要。我们在实现开放式并发 里已经讨论过,有三种concurrency control (并发控制)的策略:什么都不做—如果并发用户修改的是同一条记录,让最后提交的结果生效(默认的行为) 开放式并发(Optimistic Concurrency) — 假定并发冲突只是偶尔发生,绝大多数的时候并不会出现; 那么,当发生一个冲突时,仅仅简单的告知用户,他所作的更改不能保存,因为别的用户已经修改了同一条记录 保守式并发(Pessimistic Concurrency )— 假定并发冲突经常发生,并且用户不能容忍被告知自己的修改不能保存是由于别人的并发行为;那么,当一个用户开始编辑一条记录,锁定该记录,从而防止其他用户编辑或删除该记录,直到他完成并提交自己的更改 目前为止我们编辑DataList 的教程都是使用的默认的策略—也就是我们让最后写的结果生效。本章我们学习如何使用开放式并发。第一步: 理解开放式并发是如何实现的开放式并发控制能够确保一条记录在更新或者删除时跟它开始这次更新或修改过程时保持一致。例如,当在一个可编辑的DataList里点击编辑按钮时,该记录的原始值从数据库中读取出来并显示在TextBox和其他Web控件中。这些原始的值需要被保存下来。随后,当用户完成他的修改并点击更新按钮,这些原始值加上修改后的新值发送到业务逻辑层,然后到数据访问层。数据访问层发出一个SQL语句,它将仅仅更新那些开始编辑时的原始值根数据库中的值一致的记录。图一描述了这些事件发生的顺序。图1: 为了更新或删除能够成功,原始值必须与数据库中相应的值一致有多种方法可以实现开放式并发控制(查看Peter A. Bromberg的文章 Optmistic Concurrency Updating Logic,从摘要中看到许多选择)。ADO.NET类型化数据集提供了一种应用,这只需要在配置时勾选上一个CheckBox。开启TableAdapter 的开放并发需要在TableAdapter 的Update和Delete语句后面加一个比较所有原始值的WHERE从句。我们在实现开放式并发类型化数据集(名为NorthwindOptimisticConcurrency)和一个名为ProductsOptimisticConcurrencyBLL的BLL类。里创建了一个这样的本章我们将使用上面的方法创建一个DataList。注意:在继续前请阅读实现开放式并发 ,它提供了关于开放并发如何工作和如何让BLL和DAL执行开放并发的详细信息。第二步: 创建一个可编辑和删除的 DataList 使用DataList执行开放并发时,需要我们保存原始值 —更新或删除时的值— 然后将这些值连同新的值一起传到BLL。首先我们来创建一个可编辑和删除的DataList,它列出product,并允许修改name和price。打开EditDeleteDataList文件夹下的OptimisticConcurrency.aspx页。拖一个DataList进来。并将ID设为Products。通过它的智能标签,创建一个名为ProductsDataSource的ObjectDataSource,并用ProductsBLL类的GetProducts()方法配置它。在UPDATE,INSERT,DELETE标签里选择(None).图 2: 在UPDATE, INSERT, DELETE标签里选择 (None) 配置完后,Visual Studio会自动创建一个ItemTemplate,它包含product的每个字段。修改它让它只显示ProductName和UnitPrice。我们需要在ItemTemplate里添加两个button来支持编辑和删除功能 — 一个删除product,一个使product可编辑。记得这些button必须将CommandName的值设为Edit和Delete,这样在被点击button时的postback中EditCommand和DelelteCommand事件才会激发。我的ItemTemplate用h4显示product name,用货币格式显示price。你可以根据自己的喜好自定义。注意:由于主要将精力集中在开放并发上,本章将创建ItemTemplate和EditItemTemplate的步骤带过。如果需要更详细的内容,请参考用DataList和Repeater来显示数据 和综叙:在DataList里编辑和删除数据 ASP.NET ItemTemplate h4 asp:Label ID=ProductNameLabel runat=ser

文档评论(0)

tt435678 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档