我正在使用Oracle.ManagedDataAccess從我的數據庫返回數據,而且我真的需要分頁結果,因爲此表中有很多寄存器。OracleDataReader僅返回分頁查詢的最後一行
所以我使用第二個答案從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();
更爲離奇的是,當我在相同的方法,無需分頁運行此查詢將返回我所有的寄存器,超過723000。
任何幫助,將不勝感激。
非常感謝。
謝謝你的快速回復,但這不是我的情況下,相對於程序創建。如果我需要更改查詢,我將通過一個發佈過程,如果我需要重新編譯proc或應用程序,這沒有任何區別。 –
此外,我在文本中使用參數的其他方法,像魅力一樣工作,所以我認爲這不是我的問題。不過謝謝你的時間。 –