• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • ASP.NET調用oracle實現快速分頁

    發表于:2007-09-07來源:作者:點擊數: 標簽:
    本文轉自PPLUNCLE的blog:http://dev.csdn.net/article/82/82808.shtm 《使用 ADO.NET 訪問 Oracle 9i 存儲過程》見下面的介紹(如果對這個不怎么懂的,還是先看看下面文章) http://www.microsoft.com/china/MSDN/library/data/dataAccess/DMSDNorsps.mspx 包
      本文轉自PPLUNCLE的blog:http://dev.csdn.net/article/82/82808.shtm

    《使用 ADO.NET 訪問 Oracle 9i 存儲過程》見下面的介紹(如果對這個不怎么懂的,還是先看看下面文章)clearcase/" target="_blank" >ccess/DMSDNorsps.mspx" target="_blank" class="article">http://www.microsoft.com/china/MSDN/library/data/dataAccess/DMSDNorsps.mspx  

      包定義:  

       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, --總記錄數

       Cur_ReturnCur out T_CURSOR --返回的游標

       );

      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, --總記錄數

       Cur_ReturnCur out T_CURSOR

       )

       is

       v_SourceTb1 varchar2(3000); --動態表名1

       v_SourceTb2 varchar2(3000); --動態表名2

       v_SourceTb3 varchar2(3000); --動態表名3

       v_SourceTb4 varchar2(3000); --動態表名4

       v_TotalCount varchar2(50); --總記錄數

       v_sql varchar2(3000); --動態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有個rownum特性,所以分頁的時候就是利用rownum來實現。如果大家還有什么更好的辦法記得告訴我一聲,多謝了,因為我測試了上面的分頁方法效率并不是很高?! ?

      存儲過程返回了兩個參數:TotalCount :當前條件下的總記錄數 Cur_ReturnCur :游標類型,就是所要讀取的記錄的集合
     
      下面是ASP.NET中調用的代碼:  

      ///

      /// 調用存儲過程實現快速分頁

      ///


      /// 表名稱

      /// 字段名稱

      /// 過濾條件

      /// 排序字段

      /// 分頁小值

      /// 分頁大值

      /// 總記錄(需要返回)

      /// DataTable

      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); //頁總記錄數

       cmd.Parameters["TotalCount"].Direction = ParameterDirection.Output;

       cmd.Parameters["TotalCount"].Value = 0;  

       cmd.Parameters.Add("Cur_ReturnCur",OracleType.Cursor); //返回的游標

       cmd.Parameters["Cur_ReturnCur"].Direction = ParameterDirection.Output;
      

       DataSet Ds = new DataSet();

       OracleDataAdapter adapter= new OracleDataAdapter(cmd);

       adapter.Fill(Ds);

       conn.Close();
      

       //總記錄數

       RecordCount = int.Parse(cmd.Parameters["TotalCount"].Value.ToString());

       return Ds.Tables[0];

      }

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>