gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:49:36 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com