求助!Asp.net调用Oralce分页出现的问题,郁闷得很!

问题描述

分页存储过程(PLSQL中已调试正确):CREATEORREPLACEPROCEDUREpager_proc(v_pageSizeINNUMBER,--每页记录数量v_pageNumOUTNUMBER,--总页面数v_pageIDINoutNUMBER,--当前页索引v_tblNameINNVARCHAR2,--表名v_strWhereinNVARCHAR2,--查询条件v_feildinNVARCHAR2,--查询字段v_OutCursorOUTsys_refcursor,--返回数据集合v_sizeinoutnumber--查询到记录个数)ASv_sqlVARCHAR2(1000);--暂存中间SQL语句v_pageBeginNUMBER;--分页其实记录v_pageEndNUMBER;--分页终止记录BEGINv_sql:='SELECTCOUNT(1)FROM'||v_tblName;ifv_strWhereisnotnullorv_strWhere<>''thenv_sql:=v_sql||'where'||v_strWhere;endif;EXECUTEIMMEDIATEv_sqlINTOv_size;--取得记录总数,便于进行分页计算;IFv_size!=0THENv_pageNum:=CEIL(v_size/v_pageSize);ifv_pageID<1then--判断索引是否小于1;--******v_pageID:=1;endif;ifv_pageID>v_pageNumthen--判断索引是否大于总页面数;v_pageID:=v_pageNum;endif;--获取需要在记录中截取的记录起始位置v_pageBegin:=(v_pageID-1)*v_pageSize+1;v_pageEnd:=v_pageID*v_pageSize;--构造SQL语句v_sql:='select*from(selectA.*,rownumrfrom'||'(select'||v_feild||'from'||v_tblName;ifv_strWhereisnotnullorv_strWhere<>''then--******v_sql:=v_sql||'where'||v_strWhere;endif;v_sql:=v_sql||')Awhererownum<='||v_pageBegin||')Bwherer>='||v_pageEnd;--这种方式构造不好的地方就是如果之间的ID被删除过的话,会造成between不准确。--v_sql:='SELECT*FROM'||v_tblName||'WHEREidBETWEEN'||v_pageBegin||'AND'||v_pageEnd;OPENv_OutCursorFORv_sql;ENDIF;ENDpager_proc;数据访问层调用函数:///<summary>///通用查询分页///</summary>///<paramname="curPage">当前页索引</param>///<paramname="pageSize">每页显示记录数</param>///<paramname="strSql">查询条件(不用where,直接写)</param>///<paramname="tableName">使用的表名</param>///<returns>返回pagerNode节点</returns>publicList<pagerNode>createDataSet(intcurPage,intpageSize,stringstrSql,stringtableName,stringfeild){//创建一个泛型节点List<pagerNode>myPageList=newList<pagerNode>();OracleConnectionconn=DB.createConnection();conn.Open();OracleParameter[]storedParams=newOracleParameter[8];storedParams[0]=newOracleParameter("tblName",OracleType.NVarChar);//表名storedParams[0].Value=tableName;storedParams[1]=newOracleParameter("v_strWhere",OracleType.NVarChar);//查询条件storedParams[1].Value=strSql;storedParams[2]=newOracleParameter("v_pageID",OracleType.Number);//当前页索引storedParams[2].Direction=ParameterDirection.InputOutput;storedParams[3]=newOracleParameter("v_pageSize",OracleType.Number);//每页显示记录数storedParams[3].Value=pageSize;storedParams[4]=newOracleParameter("v_feild",OracleType.NVarChar);//查询的列storedParams[4].Value=feild;storedParams[5]=newOracleParameter("v_size",OracleType.Number);//查询到总数outstoredParams[5].Direction=ParameterDirection.InputOutput;storedParams[6]=newOracleParameter("v_pageNum",OracleType.Number);//页面总数outstoredParams[6].Direction=ParameterDirection.Output;storedParams[7]=newOracleParameter("v_OutCursor",OracleType.Cursor);//返回记录集outstoredParams[7].Direction=ParameterDirection.Output;pagerNodemyNode=newpagerNode();//创建一个数据节点;//总记录数DataSetds=OracleHelper.ExecuteDataset(conn,CommandType.StoredProcedure,"pager_proc",storedParams);myNode.DsList=ds.Tables[0];myNode.TotalRecord=Convert.ToInt32(storedParams[5].Value);myNode.TotalPage=Convert.ToInt32(storedParams[6].Value);myPageList.Add(myNode);//向链表中加入一个pagerNode节点;conn.Close();returnmyPageList;}提示错误:ORA-06550:第1行,第7列:PLS-00306:调用'PAGER_PROC'时参数个数或类型错误ORA-06550:第1行,第7列:PL/SQL:Statementignored说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息:System.Data.OracleClient.OracleException:ORA-06550:第1行,第7列:PLS-00306:调用'PAGER_PROC'时参数个数或类型错误ORA-06550:第1行,第7列:PL/SQL:Statementignored说明:本人从mssql转用oracle,有的地方真的不怎么一样,请大家帮帮忙,帮我解决一下,谢谢!

解决方案

解决方案二:
#region分页代码(返回数据表、总条数、总页数等)///<summary>///执行分页///</summary>///<paramname="tableName">需分页表名(select查询语句)</param>///<paramname="paeSize">每页记录数</param>///<paramname="indexNowPage">当前页码</param>///<paramname="totalRows">引用参数,总记录数</param>///<paramname="totalPages">引用参数,总页数</param>///<returns>分页结果集</returns>publicDataTablePaging(stringtableName,intpaeSize,intindexNowPage,refinttotalRows,refinttotalPages){try{//打开连接OpenOracleConnection();//定义OracleCommand对象,设置命令类型为存储过程OracleCommandpOracleCMD=newOracleCommand("pkg_split_page.proc_split_page",conn);//Oracle里面的(包——存储过程)pOracleCMD.CommandType=CommandType.StoredProcedure;//设置执行类型为存储过程//根据存储过程的参数个数及类型生成参数对象OracleParameterp1=newOracleParameter("rowCountPerPage",OracleType.Number);//rowcountPerPage——每页显示的条数OracleParameterp2=newOracleParameter("indexNowPage",OracleType.Number);//indexNowPage——当前页码OracleParameterp3=newOracleParameter("tabName",OracleType.VarChar);//tabName——表名OracleParameterp4=newOracleParameter("totalRows",OracleType.Number);//totalRows——总记录数(output)OracleParameterp5=newOracleParameter("totalPages",OracleType.Int16);//totalPages——总页数(output)OracleParameterp6=newOracleParameter("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中OracleDataAdapterpOracleDataAdapter=newOracleDataAdapter(pOracleCMD);DataTabledatatable=newDataTable();pOracleDataAdapter.Fill(datatable);//在执行结束后,从存储过程输出参数中取得相应的值放入引用参数中以供程序调用totalRows=int.Parse(p4.Value.ToString());totalPages=int.Parse(p5.Value.ToString());//关闭连接CloseOracleConnection();returndatatable;}catch(Exceptionex){stringerror=ex.ToString();returnnull;}}#endregion#region打开连接///<summary>///关闭连接///</summary>privatevoidCloseOracleConnection(){if(conn.State==ConnectionState.Open){conn.Close();}}#endregion#region关闭连接///<summary>///打开连接///</summary>privatevoidOpenOracleConnection(){if(conn.State==ConnectionState.Closed){conn.Open();}}#endregion//方法的调用DataTabletd=Paging(condiStr,5,currentPage,refrowsCount,refpageCount);//返回请求列表、总页数、总条数

解决方案三:
上面的代码是我前不久写的,oracle是网上找的那种所谓的支持百万级数据可量的,不过存储过程不是关键,关键是怎么调用的,你看看上面的代码应该明白怎么回事!!!代码中的注释很清楚的,仔细看看!!!
解决方案四:

解决方案五:
oracle不太熟悉,但帮LZ顶一下啊
解决方案六:
分页控件就行了

时间: 2024-09-22 05:03:03

求助!Asp.net调用Oralce分页出现的问题,郁闷得很!的相关文章

ASP.NET调用oracle存储过程实现快速分页

asp.net|oracle|存储过程|分页 包定义:  create or replace package MaterialManage is  TYPE T_CURSOR IS REF CURSOR;  Procedure Per_QuickPage  (  TbName         in   varchar2,     --表名  FieldStr       in   varchar2,     --字段集  RowFilter      in   varchar2,     --过

在ASP中改善动态分页的性能

动态|分页|性能 From computerworld 在ASP中改善动态分页的性能人民银行济南分行清算中心 张立锋 山东省水利科学研究院 张 禾 -------------------------------------------------------------------------------- 概 述 ---- 现在有不少介绍利用ASP实现动态分页的文章,方法大同小异,就是每次利用ADO返回原始数据满足条件记录集中的指定页.但在实际工程应用中,原始数据量通常很大,原始数据的加工比较

ASP中关于帖子分页显示的基本方法

ASP中关于帖子分页显示的基本方法 在了解了Recordset对象的以上属性和方法后,我们来考虑一下,如何运用它们来达到我们分页显示的目的.首先,我们可以为PageSize属性设置一个值,从而指定从记录组中取出的构成一个页的行数:然后通过RecordCount属性来确定记录的总数:再用记录总数除以PageSize就可得到所显示的页面总数:最后通过AbsolutePage属性就能完成对指定页的访问.好象很并不复杂呀,下面让我们来看看程序该如何实现呢? 我们建立这样一个简单的BBS应用程序,它的数据

Asp.Net可定制分页用户控件

今天研究了以下Asp.Net 可定制分页,用起来很爽,下面给大家介绍下. 借助 Asp.Net 提供的数据绑定控件,我们无需太多的代码,甚至不需要代码,只要在 VS2005 中拖拽几下控件,进行一些属性的设置,便可以实现在Asp时代需要做大量工作才能够实现的分页功能.但在实际的应用中,尤其是在Web站点程序中,我们经常需要更加丰富的用户界面,而类似DataList或者 GridView 这样的数据控件往往不能或者很难满足我们的要求.此时,我们常常求助于 Repeater 控件,这样我们依旧会面临

权限管理 c#-关于WinServer2003+iis6.0+asp.net调用cmd权限问题

问题描述 关于WinServer2003+iis6.0+asp.net调用cmd权限问题 目前正在做一个c++编程题评分系统,其中要实现对源代码的编译并比较结果的功能.这里我是通过Process类来调用cmd执行cl命令来编译,在VS2010中测试结果没问题,但放在iis上发布后就不能调用cmd. 网上找了很多资料,说是权限问题,但试过各种方法都不行,如:应用程序池中给本地系统的权限.将aspnet账户加入到Administrator用户组.给cmd.exe设置everyone的权限.将cmd放

在ASP文件调用DLL

动态联接库(DLL)是加快应用程序关键部分的执行速度的重要方法,但有一点恐怕大部分人都不知道,那就是在ASP文件也能通过调用DLL来加快服务器的执行速度,下面我简单的介绍一下在ASP文件调用DLL的步骤.    首先,必须得有DLL文件,本例是通过VB5.0创建ActiveX DLL文件,这个文件模拟了一个掷色子的过程.   在VB5.0的环境下,新建一个工程,并双击新建工程窗口中ActiveX DLL图标,VB将自动为项目添加一个类模块,并将该项目类型设置为ActiveX DLL.在属性窗口将

在ASP中调用Excel画数据图表

excel|数据|图表 在ASP中调用Excel画数据图表,优势有很多,最突出的是可以输出多种形式的图形(总共有72种).以下是我写的一个通用ASP方法调用Excel画数据图表. <%'将数据图形化输出'dataArray二维数组'virtualFilePath输出图像文件名(虚拟路径)'nType显示类型Dim initTypeSub ExportPicture(dataArray,virtualFilePath,nType)Dim excelapp ' As New excel.Applic

javascript如何调用C#后代码中的过程 和ASP.NET调用JS乱码解决方案

asp.net|javascript|js|过程|解决 javascript如何调用C#后代码中的过程 和ASP.NET调用JS乱码解决方案  +++++++++++++++++第一种情况: 1.后台方法: protected string CsharpVoid(string strCC){  return strCC; } 2.javascript 调用<script  language="javascript">   var s = "<%=Csharp

亲密接触ASP.Net(11) 如何分页

在ASP.Net内中,如何做到分页 我不只一次地被别人问起,如何在ASP.Net实现分页功能.我实在不愿意回答这个问题.因为在ASP.Net中实现分页,实在是太简单了,简单到你一看到程序就会去气得跳楼,呵呵要发表感叹,为什么这个东东不早出来. 在以住的WEB技术中,我们要做到分页,经常是一长串代码才能搞定它,而且每用一个页面,就要重写一次,烦的要命.但是在ASP.Net中借助DataGrid控件,我们分页程序可以轻松搞定,需要的只是对DataGrid控件做一些设定.我们还是借助一个程序来看:)