Oracle分页存储过程如下:
--注意,在Oracle,存储过程需要放在包下面 create or replace package PKG_split_Page is TYPE p_cur1 IS REF CURSOR; PROCEDURE proc_split_page ( rowcountPerPage NUMBER, --每页面记录条数 indexNowPage NUMBER, --当前页码 tabName VARCHAR2, --分页表名 totalRows OUT NUMBER, --总记录数 totalPages OUT NUMBER, --总页数 p_cursor OUT PKG_split_Page.p_cur1 --游标,用于返回结果集 ); end PKG_split_Page;
C#调用存储过程代码如下:
#region 分页代码(返回数据表、总条数、总页数等) /// <summary> /// 执行分页 /// </summary> /// <param name="tableName">需分页表名(select查询语句)</param> /// <param name="paeSize">每页记录数</param> /// <param name="indexNowPage">当前页码</param> /// <param name="totalRows">引用参数,总记录数</param> /// <param name="totalPages">引用参数,总页数</param> /// <returns>分页结果集</returns> public DataTable Paging(string tableName, int paeSize, int indexNowPage, ref int totalRows, ref int totalPages) { try { //打开连接 OpenOracleConnection(); //定义OracleCommand对象,设置命令类型为存储过程 OracleCommand pOracleCMD = new OracleCommand("pkg_split_page.proc_split_page", conn);//Oracle里面的(包.存储过程) pOracleCMD.CommandType = CommandType.StoredProcedure;//设置执行类型为存储过程 //根据存储过程的参数个数及类型生成参数对象 OracleParameter p1 = new OracleParameter("rowCountPerPage", OracleType.Number);//rowcountPerPage——每页显示的条数 OracleParameter p2 = new OracleParameter("indexNowPage", OracleType.Number);//indexNowPage——当前页码 OracleParameter p3 = new OracleParameter("tabName", OracleType.VarChar);//tabName——表名 OracleParameter p4 = new OracleParameter("totalRows", OracleType.Number);//totalRows——总记录数(output) OracleParameter p5 = new OracleParameter("totalPages", OracleType.Int16);//totalPages——总页数(output) OracleParameter p6 = new OracleParameter("p_cursor", OracleType.Cursor); //设置参数的输入输出类型,默认为输入 p1.Direction = ParameterDirection.Input; p2.Direction = ParameterDirection.Input; p3.Direction = ParameterDirection.Input; p4.Direction = ParameterDirection.Output; p5.Direction = ParameterDirection.Output; p6.Direction = ParameterDirection.Output; //对输入参数定义初值,输出参数不必赋值. p1.Value = paeSize; p2.Value = indexNowPage; p3.Value = tableName; //按照存储过程参数顺序把参数依次加入到OracleCommand对象参数集合中 pOracleCMD.Parameters.Add(p1); pOracleCMD.Parameters.Add(p2); pOracleCMD.Parameters.Add(p3); pOracleCMD.Parameters.Add(p4); pOracleCMD.Parameters.Add(p5); pOracleCMD.Parameters.Add(p6); //执行,把分页结果集填入datatable中 OracleDataAdapter pOracleDataAdapter = new OracleDataAdapter(pOracleCMD); DataTable datatable = new DataTable(); pOracleDataAdapter.Fill(datatable); //在执行结束后,从存储过程输出参数中取得相应的值放入引用参数中以供程序调用 totalRows = int.Parse(p4.Value.ToString()); totalPages = int.Parse(p5.Value.ToString()); //关闭连接 CloseOracleConnection(); return datatable; } catch (Exception ex) { string error = ex.ToString(); return null; } } #endregion #region 打开连接 /// <summary> /// 关闭连接 /// </summary> private void CloseOracleConnection() { if (conn.State == ConnectionState.Open) { conn.Close(); } } #endregion #region 关闭连接 /// <summary> /// 打开连接 /// </summary> private void OpenOracleConnection() { if (conn.State == ConnectionState.Closed) { conn.Open(); } } #endregion