c# - OracleDataReader 只返回分页查询的最后一行

标签 c# oracle pagination

我正在使用 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;

Oracle client result

但是当我从下面的 .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();

.Net return

更奇怪的是,当我在没有分页的情况下以相同的方法运行此查询时,它会返回所有寄存器,超过 723,000。

Select * return

如有任何帮助,我们将不胜感激。

非常感谢。

最佳答案

默认情况下,ODP.Net 按位置而非名称设置参数。因此,您只需要在创建 OracleParameter 的数组时反转顺序,并将 BindByName 属性设置为 true,如下所示:

cmd.BindByName = true;

关于c# - OracleDataReader 只返回分页查询的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41364022/

相关文章:

node.js - 使用 sequelize 时如何解决 SequelizeDatabaseError NaN?

c# - ASP.NET Core JWT - HmacSha512 和 HmacSha512Signature 算法有什么区别?

c# - WCF 和数据契约 : Decimal giving 4 digits after the "." and sometimes only 2 digits

xml - 将 sqlplus 结果假脱机到 xml 文件时不需要的新行

java - 具有多结果子查询的查询不适用于 jdbc

javascript - jQuery Gallery,页面更改后单击事件未触发

c# - 访问者模式——接口(interface)与抽象类

c# - iOS post json数据到web服务并返回结果

java - Java Web 应用程序的性能测试

mysql - 在 CakePHP 1.2 中显示 Oracle 分页查询