Heim  >  Artikel  >  Datenbank  >  FluentData Mysql分页的一个BUG_MySQL

FluentData Mysql分页的一个BUG_MySQL

WBOY
WBOYOriginal
2016-06-01 13:26:571127Durchsuche

bitsCN.com

开发环境

FluentData3.0、VS.NET2010、Mysql5.0

 

问题描述

使用FluentData对一个表(记录数28)进行分页时,突然发现一个诡异的问题,第一页返回10条数据正常,第二页返回18条数据,第三页返回8条数据

在排除了代码问题后,逐页获取生成的分页SQL语句

第一页:select * from orders order by orderid limit 0,10

第二页:select * from orders order by orderid limit 10,20

第三页:select * from orders order by orderid limit 20,30

咋一看好像没什么问题,但是对于熟悉mysql分页的应该很快就可以看出问题所在,limit的第二个参数应该是PageSize

 

BUG定位

 该BUG源码在FluentData/Providers/MysqlProvider.cs,问题代码如下

public string GetSqlForSelectBuilder(SelectBuilderData data)        {            var sql = "";            sql = "select " + data.Select;            sql += " from " + data.From;            if (data.WhereSql.Length > 0)                sql += " where " + data.WhereSql;            if (data.GroupBy.Length > 0)                sql += " group by " + data.GroupBy;            if (data.Having.Length > 0)                sql += " having " + data.Having;            if (data.OrderBy.Length > 0)                sql += " order by " + data.OrderBy;            if (data.PagingItemsPerPage > 0                && data.PagingCurrentPage > 0)            {                sql += string.Format(" limit {0}, {1}", data.GetFromItems() - 1, data.GetToItems());            }                        return sql;        }

 

BUG修复

sql += string.Format(" limit {0}, {1}", data.GetFromItems() - 1, data.GetToItems());

应该改成

sql += string.Format(" limit {0}, {1}", data.GetFromItems() - 1, data.PagingItemsPerPage);

重新编译后一切正常,估计FluentData的作者在Mysql下没怎么测试

但是瑕不掩瑜,FluentData的确是一个非常优秀的轻量级ORM框架,自己做了一些封装,很好用

 

bitsCN.com
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn