【发布时间】:2017-05-12 20:28:40
【问题描述】:
我正在使用 Oracle.ManagedDataAccess 从我的数据库中返回数据,我确实需要对结果进行分页,因为该表中有很多寄存器。
所以我使用this 发布的第二个答案来分页,当我在 Oracle 客户端上运行时它确实有效。
最终查询如下所示:
select *
from (
select rownum as rn, a.*
from (
Select u.*
From users u
order by u.user_code
) a
)
where rownum <= :myReturnSize
and rn > (:myReturnPage-1) * :myReturnSize;
但是当我从下面的 .Net 代码中调用它时,它只返回我要求的 100 的最后一个寄存器。
OracleParameter[] parameters = new OracleParameter[]{
new OracleParameter("myReturnPage", page), //1
new OracleParameter("myReturnSize", size) //100
};
List<User> usersList = new List<User>();
using (OracleConnection conn = new OracleConnection(connString))
{
using (OracleCommand cmd = new OracleCommand(sbSelect.ToString(), conn))
{
conn.Open();
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddRange(parameters);
using (OracleDataReader odr = cmd.ExecuteReader())
{
if (!odr.IsClosed && odr.HasRows)
{
while (odr.Read())
{
User userToReturn = new User();
FillUserEntity(userToReturn, odr);
usersList.Add(userToReturn);
}
}
}
}
}
return usersList.AsQueryable();
更奇怪的是,当我在同一方法中不分页运行此查询时,它会返回所有寄存器,超过 723,000 个。
任何帮助将不胜感激。
非常感谢。
【问题讨论】:
标签: c# oracle pagination