深入ADO.NET开发—高级数据访问技术-0408+.ppt_第1页
深入ADO.NET开发—高级数据访问技术-0408+.ppt_第2页
深入ADO.NET开发—高级数据访问技术-0408+.ppt_第3页
深入ADO.NET开发—高级数据访问技术-0408+.ppt_第4页
深入ADO.NET开发—高级数据访问技术-0408+.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、深入ADO.NET开发高级数据访问技术,基础预习,熟悉Microsoft ADO.NET 了解Web Services基础开发 熟悉.NET文件集操作 LEVEL 400,议题,并发 连接池 事务 可抽取的数据访问层,并发性问题,在可断开连接架构中必须要面对并发问题 当两个(或多个)用户获取并修改相同的记录,然后试图同时维持各自的修改时,将会发生冲突:脏读,不可重复读,虚幻读 当提交多个更新的时候,会造成部分更新无法正确完成 悲观与乐观(ADO.NET构建)并发锁,ADO.NET中对并发性问题的处理,与DataAdapter对象相连接的DataSet对象使用乐观锁来处理记录内容冲突 如果使用用

2、户存储过程来替代表操作的话,并发问题的处理还需要一些额外的工作 Data Adapter配置向导能够创建存储过程来处理这个问题 当ContinueUpdateOnError为false(缺省值)时,在发生第一个冲突的时候会抛出DBConcurrencyException异常 捕获该异常并且通知用户,或者处理该异常或提示用户下一步需要做出哪些选择,并发:在.NET中使用乐观锁的处理步骤,DataSet changes = myDataSet.GetChanges(); try mySqlDataAdapter.Update(changes); myDataSet.Merge(changes);

3、catch(DBConcurrencyException e) /通知用户记录从上次更新到现在已经发生过变化,放弃更新 finally.,更高级的操作模型,DataSet changes = myDataSet.GetChanges(); try mySqlDataAdapter.ContinueOnError = true; mySqlDataAdapter.Update(changes); if(changes.HasErrors) /获取错误 DataRow collisions = changes.Tables0.GetErrors(); /处理错误 ,演示一,处理并发性问题,连接池,

4、连接池可以极大地提升性能和可扩展性 避免由创建连接所带来的大量消耗 通过在连接字符串中添加以下属性来调节连接池: Pooling=true;Max Pool Size=5;Min Pool Size=3; 上面的字符串将打开连接池,并且确保在连接池中至少存在着3个连接,并且最多为5个连接 当达到最大连接时,打开新链接的请求将排队一段可配置的时间。,注意,链接是通过对链接字符串精确匹配的法则被池化的。池化机制对名称-值对间的空格敏感。 例如,下面的两个链接字符串将生成单独的池,因为第二个字符串包含了一个额外的空字符。 Integrated Security=SSPI;Database=North

5、wind Integrated Security=SSPI ; Database=Northwind,演示二,连接池,事务,ACID原则:原子性,一致性,隔离性,持久性 事务行为要么完成所有动作,要么不做任何动作 同时提交或者回滚所有的修改 不是所有的SQL语句都允许出现在事务中 ADO.NET事务只能应用于单一链接中 SqlTransaction对象从SqlConnection.BeginTransaction()方法中返回,SqlTransaction类,SqlTransaction trans = conn.BeginTransaction(); 隔离级别枚举(IsolationLeve

6、l):ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Unspecified Serializable是最高级别的隔离 /处理工作 Insert, Update, Delete /要么提交所有的修改 trans.Commit(); /要么如果发生错误,撤回所有的修改 trans.RollBack();,隔离级别,Serializable提供了最高的隔离级别,但却只有最低的执行效率,演示三,本地事务操作,高级事务,为了执行跨数据库事务,需要通过System.EnterpriseServices向分布式事务协调器(DTC)

7、注册链接 在中间层Web服务上添加:System.EnterpriseServices.Transaction属性 TransactionOption枚举:Disabled, NotSupported, Required, RequiresNew, Supported TransactionIsolationLevel枚举:ReadCommitted, ReadUnCommitted, RepeatableRead, Serializable Serializable是最高级别的隔离 连接字符串中的Enlist项表明链接是否参与到事务操作中。 当链接字符串中Enlist=false时,可以调用

8、SqlConnection.EnlistDistributedTransaction方法以执行事务操作,演示四,跨数据库事务,层次化应用程序架构,多层应用程序将代码分为不同的逻辑代码层 非常普遍的设计方案是3层架构设计:表示层,业务逻辑层和数据访问层. 合理的层次化设计带来了很多益处:代码复用, 可扩展性, 封装性, 松散的耦合性,高聚合性 我们能够设计一个可抽取的数据访问层来完全抽象数据存储,概念层次化应用程序架构,可抽取数据访问层,可抽取组件在获得扩展性方面是一种强有力的方法 设计可抽取DAL可以很容易地修改,更新甚至更改数据存储而不需要重编译其它层 通过接口实现松耦合度 通过基于接口的工

9、厂模式以实现可抽取组件 将数据访问层从业务逻辑层中完全抽象出来,概念数据访问层(DAL),位于应用程序的业务逻辑与数据存储之间的代码层 包含了应用程序所有的数据访问代码;提供CRUD操作函数. 在.NET中,这是包含ADO代码方法的基本文件集 表示层只与业务逻辑层有松散的耦合关系 业务逻辑层只与数据访问层有松散的耦合关系,概念基于接口的编程,接口类似于合同 基于接口的编程消除了从实际代码中实现的方法的耦合性 提供了多态机制 实现可抽取组件,概念可抽取组件,.NET允许通过Assembly.Load()以及Assembly.CreateInstance()来动态加载文件集和类 通过配置指向具体的DAL类 新的或者改进的(不同)组件可以插入到现存的应用程序中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论