知识大全 剖析.Net下的数据访问层技术(2)
Posted 操作
篇首语:宁可枝头抱香死,何曾吹落北风中。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 剖析.Net下的数据访问层技术(2)相关的知识,希望对你有一定的参考价值。
剖析.Net下的数据访问层技术(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
其它 结束ADO NET剖析前 不得不提提DataReader与DataSet间的兄弟之争 就作者所看过的资料 几乎所有的都建议实际情况具体分析 剩下很少很少的则全凭个人习惯决定 在学习ADO NET时 作者也是抱着这样的想法 并反复牢记资料上总结的那些条款(就像当年学习GOF 条时那样 几乎可以倒背如流了J) 想到终有一日也可在ADO NET下大展神威了 可惜现实不随人愿 连续做了几个项目 无论规模大小 竟然全部采用了DataSet解决方案! 此时 再回头看看学习ADO NET时打开最为频繁的PetShop项目 两相一比较 这才看出些许端倪 简单的说 PetShop采用了如下这种 曲线救国 的方式来实现数据交换 DataReader获取数据 => 创建数据实体类 => 根据字段类型填充数据实体类 => 将数据实体添加到列表类中(仅针对返回超过一条数据的场合) (补充 采用数据实体类或者集合类可以比较方便的实现Cache Manament 而普通的DataReader由于其数据读取方式限制 无法满足这种需求) 这个过程与DataAdapter Fill() 所所产生的效果大同小异 只不过 在Fill() 中DataAdpater自动创建DataReader去获取数据 之后创建DataTable(相当于数据实体类) 并根据字段类型填充DataTable 当然 如果可能返回多条记录 DataTable完全可以处理 就没必要去实现列表操作了 可能读者马上产生了疑问 既然如此 PetShop中为何还需要数据实体类呢?这其中还是有一些差别的 首先 数据实体类是轻量级的structure 一般仅包含数据字段 没有 什么操作方法 这比DataTable或者DataRow还是有一些性能上的优势(在数据量不大时可以忽略不计) 另一方面 数据实体类的操作相对简单 不需要开发人员具备任何ADO NET知识(其实就DataTable来说 这也不算什么问题) 点点属性就可以了 不过 根据作者的实践来看 这两方面似乎还不足以使人转而使用DataReader方案 理由列举如下 ( ) 对于数据量较大的场合 可以采用分批读取的方式 这有点类似DataGrid的数据分页效果 ( ) 对于简单的数据 实体类还能应付 一旦涉及关联数据 就只能另外撰写方法了 而所有这些 在DataSet中是非常容易处理的(对于企业级应用 大部分情况都需要处理比较复杂的数据) ( ) DataTable 天生 就支持数据集合操作 这样的特性比 集合+实体 的混合模式(PetShop)更容易控制 也更自然 ( ) 实体类在声明时需要确定所有数据类型 当进行数据填充时 就需要DataReader再次关注实体所对应的数据类型 不能有丝毫差错!在这方面 DataTable就显得非常方便 操作时只需要一次类型关注即可 ( ) DataSet解决方案可以非常方便的支持序列化操作(如 Remoting WebServices) 同时 与XML的关系更是亲密无比 这对于和其它系统的交互来说也是至关重要的 分析过一些技术和方案 相信读者朋友已有一些体会 值此收官之际 如果非要在这里提供一个 综上所述 那作者的建议就非常明确 在企业级应用开发中 尽可能的采用DataSet(DataTable / DataView)+ Cache Management解决方案! 其它开发中 只在如下 种情况才考虑使用DataReader(就作者经验来说 大部分使用DataReader都属第2种情况) ( ) 对资源要求比较苛刻的场合 这里的资源主要指内存和数据库连接 ( ) 希望在读取数据库返回结果集时作自定义处理 例如 在读取一条记录后立刻终止处理 或者在读取时作计算操作 (提示 这种情况类似于XML中的SAX(Simple API for XML)技术 无需一次性读入所有XML数据即可进行操作 相反的 DOM(Document Object Model)则要求必须装载所有XML数据后才能开始操作(MSXML 已开始允许只读取XML文档部分数据即可开始操作 这是后话)!) ( ) 只希望得到返回记录数或者返回记录的部分字段 如 string GetNameByID(int nID) //根据员工ID返回员工姓名 这里只需要 // 读取姓名字段 (提示 这种情况一般可以通过执行特定的查询或存储过程直接解决) ( ) 出于某些方面的考虑(例如 n Tier系统中严格区分各Layer间的职责) 无法(或者禁止)通过数据库本身进行查询过滤 这时就只有使用DataReader在读取时进行过滤操作! (提示 虽然DataView也能达到这种目的 但它的过滤前提是必须读取到所有返回数据 所以性能上不如DataReader!) cha138/Article/program/Java/hx/201311/26977相关参考
剖析.Net下的数据访问层技术(4) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Micros
剖析.Net下的数据访问层技术(3) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! O/RMap
知识大全 剖析 ADO.NET 批处理更新(深入研究数据访问)
剖析ADO.NET批处理更新(深入研究数据访问) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ADO.NET实现应用程序数据访问层 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 实现数据访问
ASP.NET2.0——实现数据访问层 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在文章重点
设计.NET应用程序数据访问层五大原则 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘要大多数
ASp.net剖析三层架构 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
VS2005数据存取层深入剖析基础篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!摘要本文试图对V
VS2005数据存取层深入剖析高级篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一扩展表格适配器
完成数据访问层 注意ProductsTableAdapters类从Products表中返回的是CategoryID和SupplierID的值但并不包括Categories表的CategoryNa