国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET調(diào)用oracle存儲(chǔ)過程實(shí)現(xiàn)快速分頁

2024-07-10 13:02:59
字體:
供稿:網(wǎng)友

包定義:

 create or replace package materialmanage is
  type t_cursor is ref cursor;
  procedure per_quickpage
  (
  tbname         in   varchar2,     --表名
  fieldstr       in   varchar2,     --字段集
  rowfilter      in   varchar2,     --過濾條件
  sortstr        in   varchar2,     --排序集
  rownumfieldstr in   varchar2,     --分頁條件
  totalcount     out  number,       --總記錄數(shù)
  cur_returncur  out  t_cursor      --返回的游標(biāo)
  );
end materialmanage;

包主體:

create or replace package body materialmanage is
 procedure per_quickpage
  (
  tbname         in   varchar2,           --表  名
  fieldstr       in   varchar2,               --字段集
  rowfilter      in   varchar2,             --過濾條件
  sortstr        in   varchar2,                --排序集
  minrownum      in   number,        --分頁小值
  maxrownum      in   number,       --分頁大值
  totalcount     out  number,           --總記錄數(shù)
  cur_returncur  out  t_cursor
  )
  is
  v_sourcetb1    varchar2(3000);      --動(dòng)態(tài)表名1
  v_sourcetb2    varchar2(3000);      --動(dòng)態(tài)表名2
  v_sourcetb3    varchar2(3000);      --動(dòng)態(tài)表名3
  v_sourcetb4    varchar2(3000);      --動(dòng)態(tài)表名4
  v_totalcount   varchar2(50);           --總記錄數(shù)
  v_sql          varchar2(3000);              --動(dòng)態(tài)sql        
  begin
  v_sourcetb1 := '(select '|| fieldstr ||' from '|| tbname ||') sourcetb1';
  v_sourcetb2 := '(select * from '|| v_sourcetb1 ||' where '|| rowfilter ||' '|| sortstr ||') sourcetb2';
  v_sourcetb3 := '(select rownum as rowindex,sourcetb2.* from '|| v_sourcetb2 ||' where rownum<='|| maxrownum ||') sourcetb3';
  v_sourcetb4 := '(select * from '|| v_sourcetb1 ||' where '|| rowfilter ||') sourcetb4';
  v_sql       := 'select count(*) as totalcount from '|| v_sourcetb4;
  execute immediate v_sql into v_totalcount;
  totalcount  := v_totalcount;
  v_sql       := 'select * from '|| v_sourcetb3 ||' where rowindex >='||minrownum;
  open cur_returncur for v_sql;
  end per_quickpage;
end materialmanage;

由于oracle有個(gè)rownum特性,所以分頁的時(shí)候就是利用rownum來實(shí)現(xiàn)。如果大家還有什么更好的辦法記得告訴我一聲,多謝了,因?yàn)槲覝y試了上面的分頁方法效率并不是很高。

存儲(chǔ)過程返回了兩個(gè)參數(shù):totalcount  :當(dāng)前條件下的總記錄數(shù)       cur_returncur :游標(biāo)類型,就是所要讀取的記錄的集合

下面是asp.net中調(diào)用的代碼:

/// <summary>
/// 調(diào)用存儲(chǔ)過程實(shí)現(xiàn)快速分頁
/// </summary>
/// <param name="tbname">表名稱</param>
/// <param name="fieldstr">字段名稱</param>
/// <param name="rowfilter">過濾條件</param>
/// <param name="sortstr">排序字段</param>
/// <param name="minpagenum">分頁小值</param>
/// <param name="maxpagenum">分頁大值</param>
/// <param name="totalcount">總記錄(需要返回)</param>
/// <returns>datatable</returns>
public datatable quickpage(string tbname,string fieldstr,string rowfilter,string sortstr,int minrownum,int maxrownum,ref int recordcount)
{
 oracleconnection conn = new oracleconnection(configurationsettings.appsettings["oracleconnstr"].tostring());
 oraclecommand cmd  = new oraclecommand();
 cmd.connection   = conn;
 cmd.commandtext   = "materialmanage.per_quickpage";
 cmd.commandtype   = commandtype.storedprocedure;

 cmd.parameters.add("tbname",oracletype.varchar,50);    //表  名
 cmd.parameters["tbname"].direction = parameterdirection.input;
 cmd.parameters["tbname"].value     = tbname;

 cmd.parameters.add("fieldstr",oracletype.varchar,3000);   //字段集
 cmd.parameters["fieldstr"].direction = parameterdirection.input;
 cmd.parameters["fieldstr"].value     = fieldstr;

 cmd.parameters.add("rowfilter",oracletype.varchar,3000);  //過濾條件
 cmd.parameters["rowfilter"].direction = parameterdirection.input;
 cmd.parameters["rowfilter"].value     = rowfilter;

 cmd.parameters.add("sortstr",oracletype.varchar,3000);   //排序字段
 cmd.parameters["sortstr"].direction = parameterdirection.input;
 cmd.parameters["sortstr"].value     = sortstr;

 cmd.parameters.add("minrownum",oracletype.number);    //分頁小值
 cmd.parameters["minrownum"].direction = parameterdirection.input;
 cmd.parameters["minrownum"].value     = minrownum;

 cmd.parameters.add("maxrownum",oracletype.number);    //分頁大值
 cmd.parameters["maxrownum"].direction = parameterdirection.input;
 cmd.parameters["maxrownum"].value     = maxrownum;

 cmd.parameters.add("totalcount",oracletype.number);    //頁總記錄數(shù)
 cmd.parameters["totalcount"].direction = parameterdirection.output;
 cmd.parameters["totalcount"].value     = 0;

 cmd.parameters.add("cur_returncur",oracletype.cursor);   //返回的游標(biāo)
 cmd.parameters["cur_returncur"].direction = parameterdirection.output;

 dataset ds = new dataset();
 oracledataadapter adapter= new oracledataadapter(cmd);
 adapter.fill(ds);
 conn.close();

 //總記錄數(shù)
 recordcount  = int.parse(cmd.parameters["totalcount"].value.tostring());
 return ds.tables[0];
}
好了,代碼都羅列到上面了,至于用,大家應(yīng)該知道了吧

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临夏县| 吐鲁番市| 河北省| 昌乐县| 兰州市| 西华县| 中江县| 全椒县| 同仁县| 黑龙江省| 寻甸| 上虞市| 新安县| 汶川县| 库车县| 肥乡县| 教育| 和平区| 宝鸡市| 青海省| 遵义县| 西平县| 个旧市| 绥宁县| 稷山县| 三门峡市| 咸阳市| 伊吾县| 九台市| 桂东县| 济宁市| 施秉县| 郧西县| 葫芦岛市| 哈密市| 鄂尔多斯市| 波密县| 饶河县| 延川县| 米泉市| 鄂伦春自治旗|