共有回帖数 1 个
-
毫无疑问,ADO.NET向人们提供了一种功能强大、仿真数据库的对象模型,它可以将数据记录保存到内存中。尤其是ADO.net的DataSet类,它不但在功能上相当于数据库表的集中存储器(centralrepository),而且支持表间的各种约束和逻辑关系。进一步说来,DataSet对象其实是一种离线数据容器。
乍一看,只要把DataSet类的所有特性联合起来,就能消除SQL查询命令中的复杂子句,比如那些泛滥成灾且层层嵌套的INNERJOIN子句或者GROUPBY子句等。复杂的子句可以分解成两个或更多个相互独立的简单子句,而将每个简单子句的查询结果分别保存在不同的DataTable对象中;以后只要分析这些内存数据之间的约束和逻辑关系,就能重建原先表之间必要的“参照完整性”(referentialintegrity)。
举个例子:你可以把客户(Customers)表与订单(Orders)表分别保存到两个不同的DataTable对象中,然后通过DataRelation对象进行绑定(bind)。这样,SQLServer(或其它DBMS系统)就免除了INNERJOIN子句带来的沉重负担;更重要的是,网络传输负荷也因此而大大减轻。象这样简化SQL查询的方案固然行之有效,却并不一定总是最佳选择,尤其是当你的数据库规模庞大而且更新频繁时。
本文将为大家介绍另一种用于简化SQL查询的技术,它充分利用ADO.NET的内存数据对象减轻了用户和DBMS系统的负担。
分解SQL查询命令
许多有关ADO.NET的书籍,比如DavidSceppa的大作《ProgrammingADO.NETCoreReference》(微软出版社),都建议把复杂的SQL查询命令分解成若干简单的子查询,然后把各个子查询的返回结果分别保存到同一个DataSet容器内部的若干个DataTable对象中。请看一个实例。
假设你需要获取一些客户订单信息,要求订单是提交于指定年份而且按客户进行分组,还要求订单中至少包含30件商品。同时,你还希望获取每个订单的提交者(employee)名字以及客户(customer)的公司名。你可以用下列SQL查询语句来实现它:


楼主 2016-08-31 19:49 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知