注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樱之花

叶散的时候,你明白欢聚;花谢的时候,你明白青春.

 
 
 

日志

 
 
关于我

分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!

网易考拉推荐

004 VB.NET 存储过程分页代码  

2011-10-26 13:40:32|  分类: 我的实验室 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

存储公共函数

    Public Shared Function ExecStore(ByVal storename As String, ByVal sin(,) As String, ByRef sout(,) As String)
        Dim conn As New OracleConnection(DbOpe.ConnStr)
        conn.Open()
        Dim cmdSQL As New OracleClient.OracleCommand
        Dim dsDrop As New DataSet
        Dim adpDrop As New OracleDataAdapter
        Try
            cmdSQL.Connection = conn
            cmdSQL.CommandType = CommandType.StoredProcedure
            cmdSQL.CommandText = storename

            '判断是否有输入参数
            If sin IsNot Nothing Then
                For i As Integer = 0 To sin.GetLength(0) - 1
                    cmdSQL.Parameters.Add(sin(i, 0), CType(sin(i, 1), OracleType)).Value = sin(i, 2)
                Next
            End If

            '判断是否有输出参数
            If sout IsNot Nothing Then
                For j As Integer = 0 To sout.GetLength(0) - 1
                    cmdSQL.Parameters.Add(sout(j, 0), CType(sout(j, 1), OracleType)).Direction = ParameterDirection.Output
                Next
            End If

            adpDrop.SelectCommand = cmdSQL
            adpDrop.Fill(dsDrop)
            adpDrop.Dispose()

            '输出参数赋值
            If sout IsNot Nothing Then
                For j As Integer = 0 To sout.GetLength(0) - 1
                    sout(j, 0) = cmdSQL.Parameters(sout(j, 0)).Value.ToString
                Next
            End If

            cmdSQL.Dispose()
        Catch ex As Exception
            System.Web.HttpContext.Current.Response.Write(ex.Message)
            cmdSQL.Dispose()
        Finally
            conn.Close()
        End Try
        Return dsDrop


分页存储调用:

        '输入参数
        Dim sin(,) As String = {{"psql", OracleType.VarChar, sql}, {"pfrist", OracleType.Number, Me.GridViewEx1.PageIndex + 1}, {"psize", OracleType.Number, GridViewEx1.PageSize}}

        '输入参数
        Dim sout(,) As String = {{"pnote", OracleType.Cursor}, {"pcount", OracleType.Number}, {"pnotecount", OracleType.Number}}
        Dim ds As New DataSet

        ds = ExecStore("P_PAGINTION", sin, sout)

        '输出参数第一个参数值不需要显示。
        'Response.Write("页数:" & sout(1, 0) & " 记录数:" & sout(2, 0))
        If ds.Tables.Count > 0 Then
            dt = ds.Tables(0)
            'Response.Write("<br>记录数:" & dt.Rows.Count)
        End If


Oralce存储过程:

CREATE OR REPLACE PACKAGE webcsms.page
AS
   TYPE type_cur IS REF CURSOR;
END page;


CREATE OR REPLACE PROCEDURE webcsms.p_pagintion (
   psql         IN       VARCHAR2,                               --条件SQL语句
   pfrist       IN       NUMBER,                                      --第几页
   psize        IN       NUMBER,                              --一页显示多少条
   pcount       OUT      NUMBER,                                      --共几页
   pnotecount   OUT      NUMBER,                                      --总记录
   pnote        OUT      page.type_cur                          --显示页的记录
)
AS
   v_pfrist      NUMBER;
   v_sql         VARCHAR2 (2000);
   v_sql1        VARCHAR2 (100);
   v_sql2        VARCHAR2 (100);
   v_sql3        VARCHAR2 (3000);
   v_notecount   NUMBER;
   v_min         NUMBER;
   v_max         NUMBER;
BEGIN
   v_sql := 'select count(1) from (' || psql || ')';        --查询总记录的SQL

   EXECUTE IMMEDIATE v_sql
                INTO v_notecount;                   --执行SQL把总记录结果得到

   pnotecount := v_notecount;
   pcount := CEIL (pnotecount / psize);                          --求出总页数
   v_pfrist := pfrist;

   IF (v_pfrist > pcount)
   THEN
      v_pfrist := pcount;
   -- 如果传进来的页数大于最后一页,默认返回最后一页数据
   END IF;

   v_max := v_pfrist * psize;                         --显示页的最大记录排行值
   v_min := v_max - psize + 1;                        --显示页的最小记录排行值
   --pcount:=v_pfrist;
   --pnotecount:=v_min;
   v_sql1 := 'select * from (select rownum rn,t.* from ';
   v_sql2 := ' t ) where rn between ' || v_min || ' and ' || v_max;
   v_sql3 := v_sql1 || ' ( ' || psql || ' ) ' || v_sql2;             --分页SQL

   OPEN pnote FOR v_sql3;
END p_pagintion;



  评论这张
 
阅读(676)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017