zhuweisky

君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。
ESFramework,基于.NET的通信框架。DataRabbit,轻量的数据访问框架。DCFramework,基于.NET的动态分布式计算框架。sky.zhuwei@163.com

统计

留言簿

积分与排名

好友博客

阅读排行榜

评论排行榜

DataRabbit 轻量的数据访问框架(10) -- IPagerManager

   (完全限定类名:DataRabbit.Core.IPagerManager

   DataRabbit框架提供了对单表查询的结果进行分页的功能,这就是IPagerManager所完成的目标。我们可以从DataRabbit的入口点IDataAccesser中获取IPagerManager引用: 
   PagerParameters param = ...; //构建分页参数 
   IPagerManager pagerManager
= dataAccesser.GetPagerManager(param);
   首先,我们看分页参数PagerParameters中需要提供哪些信息:

   分页参数包括的信息有:
Table -- 表示对那个数据表进行分页。
PageSize -- 表示每页的大小,包含多少条记录。
PKey -- 表示依据哪个主键进行排序分页。
WhereStr -- 表示查询条件,仅仅对满足条件的查询结果分页,如果要分页表中的所有数据,则设置为其值null。
CacherSize -- 表示最大缓存多少个页面。
Fields -- 表示要返回的页中包括哪些列。
FieldAlias -- 表示要进行替换的列的别名。

   通过构建一个PagerParameters实例,我们就可以从IDataAccesser获取目标表的数据分页管理器IPagerManager实例,IPagerManager接口完整定义如下:
    public interface IPagerManager
    {    
        
/// <summary>
        
/// GetPage 取出第index页
        
/// </summary>       
        DataTable GetPage(int index) ;  

        
/// <summary>
        
/// ItemCount 符合条件的记录总数
        
/// </summary>
        int ItemCount{get ;}

        
/// <summary>
        
/// PageCount 分页总数
        
/// </summary>
        int PageCount{get ;}

        
/// <summary>
        
/// CacherSize 缓存大小
        
/// </summary>
        int CacherSize{get;}
    }   
    通过接口定义,我们看到,IPagerManager没有继承 ITransactionAccesser 接口,这表明,IPagerManager只能在非事务环境中工作。
   GetPage()方法根据页的索引index就可以得到对应页的内容,注意,我们使用DataTable反映一页的内容。

   下面是对Student表进行分页,并且将页绑定到DataGridView显示的例子:
            PagerParameters para = new PagerParameters("Student""ID"""10);
            IPagerManager pagerManager 
= dataAccesser.GetPagerManager(para);

            //绑定
            
this.dataGridView1.DataSource = pagerManager.GetPage(int.Parse(this.textBox_pageIndex.Text));


转到:DataRabbit 轻量的数据访问框架 -- 序 




posted on 2007-03-22 11:04 zhuweisky 阅读(2669) 评论(5)  编辑 收藏 网摘 所属分类: DataRabbit

评论

#1楼 2007-03-22 11:52 JesseZhao      

这个框剪感觉架构很有心意啊   回复  引用  查看    

#2楼 2007-03-22 12:17 rIPPER[未注册用户]

可以发一个摘要上来吗? 首页上4-5条rabbit,眼睛都看花了,点近来一看,只有rabbit尾巴这么长   回复  引用    

#3楼 2008-11-19 16:31 草原上的骏马      

@zhuweisky,在吗!
我发现一个问题:使用 IPagerManager 进行分页的时候,在数据量达到百万条是时候,翻页的时候奇慢,跟踪下发现:原来是这样执行的:
我的页面大小是 20,记录条数:100 0000
看第2页的跟踪结果:
Select top 20 * from (
Select top 999986 * from UserAccounts (nolock)
WHERE UserID>10000 AND MemberOrder=4 AND ServiceNullity=0 AND MasterRight=0 ORDER BY UserID ASC )
DERIVEDTBL ORDER BY UserID DESC

这样,无论怎么做索引好像都没有办法来解决的!

请问朱伟大哥还有没有其他的算法来解决这个分页的问题! 这个算法在数据量比较小的情况下还算适用!
  回复  引用  查看    

#4楼 2009-05-17 21:30 轰天炮[未注册用户]

PagerParameters para = new PagerParameters("MvcShop_ProductCategory", "CategoryID", where, PageSize);

IDataAccesser dataAccesser = DataAccesserFactory.CreateDataAccesser(DALUtility.config, true, null);
IPagerManager pagerManager = dataAccesser.GetPagerManager(para);

System.Data.DataTable dt = pagerManager.GetPage(PageIndex);

为什么这样获取不到数据,dt总是null,在sql server跟踪了下发现根本就没有进行查询,我哪个地方写错了,请老大指正,谢谢啦。
  回复  引用    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 683676




相关文章:

相关链接: