数据层组件设计与数据传递5

时间:2010-02-02 08:29:58  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:的仅有组件。业务实体实现应不需要知道或依赖于数据库架构。   使存储过程与数据访问逻辑组件相关联。每个存储过程只应被一个数据访问逻辑组件调用,并应与调用它的数据访问逻辑组件相关联。例如,假设一个客户向一个零售商订货。您可以编写一个名为 OrderInsert 的存储过程,用于在数据库中创建订单。在您的应用程序中,必须确定是从 Customer 数据访问逻辑组件还是从 ...
  正文:配合使用数据访问逻辑组件与存储过程的建议
    配合使用数据访问逻辑组件与存储过程时,请考虑以下建议:
  
  公开存储过程。数据访问逻辑组件应当是向存储过程名称、参数、表、字段等数据库架构信息公开的仅有组件。业务实体实现应不需要知道或依赖于数据库架构。
  使存储过程与数据访问逻辑组件相关联。每个存储过程只应被一个数据访问逻辑组件调用,并应与调用它的数据访问逻辑组件相关联。例如,假设一个客户向一个零售商订货。您可以编写一个名为 OrderInsert 的存储过程,用于在数据库中创建订单。在您的应用程序中,必须确定是从 Customer 数据访问逻辑组件还是从 Order 数据访问逻辑组件调用该存储过程。Order 数据访问逻辑组件处理所有与订单相关的任务,而 Customer 数据访问逻辑组件处理客户姓名、地址等客户信息,因此最好使用前者。
  命名存储过程。为要使用的数据访问逻辑组件定义存储过程时,所选择的存储过程名称应当强调与之相关的数据访问逻辑组件。这种命名方法有助于识别哪个组件调用哪个存储过程,并为在 SQL 企业管理器中逻辑分组存储过程提供了一种方法。例如,可以事先编写名为 CustomerInsert、CustomerUpdate、CustomerGetByCustomerID、CustomerDelete 的存储过程供 Customer 数据访问逻辑组件使用,然后提供 CustomerGetAllInRegion 等更具体的存储过程以支持您的应用程序的业务功能。
  注意:不要在存储过程名称前面使用前缀 sp_,这会降低性能。当调用一个以 sp_ 开头的存储过程时,SQL Server 始终会先检查 master 数据库,即使该存储过程已由数据库名称进行限定。
  解决安全性问题。如果接受用户输入以动态执行查询,请不要通过没有使用参数的连接值来创建字符串。如果使用 sp_execute 执行结果字符串,或者不使用 sp_executesql 参数支持,则还应避免在存储过程中使用字符串连接。
    管理锁定和并发
    某些应用程序在更新数据库数据时采用“后进有效”(Last in Wins) 法。使用“后进有效”法更新数据库时不会将更新与原始记录相比较,因此可能会覆盖掉自上次刷新记录以来其他用户所做的所有更改。然而,有时应用程序却需要在执行更新之前确定数据自最初读取以来是否被更改。
  
    数据访问逻辑组件可以实现管理锁定和并发的代码。管理锁定和并发的方法有两种:
  
  保守式并发。为进行更新而读取某行数据的用户可以在数据源中对该行设置一个锁定。在该用户解除锁定之前,其他任何用户都不能更改该行。
  开放式并发。用户在读取某行数据时不锁定该行。其他用户可以在同一时间自由访问该行。当用户要更新某行数据时,应用程序必须确定自该行被读取以来其他用户是否进行过更改。尝试更新已经过更改的记录会导致并发冲突。
    使用保守式并发
    保守式并发主要用于数据争用量大以及通过锁定来保护数据的成本低于发生并发冲突时回滚事务的成本的环境。如果锁定时间很短(例如在编程处理的记录中),则实现保守式并发效果最好。
  
    保守式并发要求与数据库建立持久连接,并且因为记录可能被锁定较长时间,因此当用户与数据进行交互时,不能提供可缩放的性能。
  
    使用开放式并发
    开放式并发适用于数据争用量低或要求只读访问数据的环境。开放式并发可以减少所需锁定的数量,从而降低数据库服务器的负荷,提高数据库的性能。
  
    开放式并发在 .net 中被广泛使用以满足移动和脱机应用程序的需要。在这种情况下,长时间锁定数据是不可行的。此外,保持记录锁定还要求与数据库服务器的持久连接,这在脱机应用程序中是不可能的。
  
    测试开放式并发冲突
    测试开放式并发冲突的方法有多种:
  
  使用分布式时间戳。分布式时间戳适用于不要求协调的环境。在数据库的每个表中添加一个时间戳列或版本列。时间戳列与对表内容的查询一起返回。当试图更新时,数据库中的时间戳值将与被修改行中的原始时间戳值进行比较。如果这两个值匹配,则执行更新,同时时间戳列被更新为当前时间以反映更新。如果这两个值不匹配,则发生开放式并发冲突。
  保留原始数据值的副本。在查询数据库的数据时保留原始数据值的一个副本。在更新数据库时,检查数据库的当前值是否与原始值匹配。
  原始值保存在 DataSet 中,当更新数据库时,数据适配器可以使用该原始值执行开放式并发检查。
  使用集中的时间戳。在数据库中定义一个集中的时间戳表,用于记录对任何表中的任何行的更新。例如,时间戳表可以显示以下信息:“2002 年 3 月 26 日下午 2:56 约翰更新了表 XYZ 中的行 1234”。
数据层组件设计与数据传递5》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12735.html


关键字:

关于《数据层组件设计与数据传递5》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td