asp如何调用存储过程实现分页!十万火急~~
以下:try {Class.forName(drive);Connection con=DriverManager.getConnection(url, name, password);** String sql = "{call sel_pro(?)}";CallableStatement cs=con.prepareCall(sql);cs.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);****cs.execute();ResultSet rs=(ResultSet)cs.getObject(1);//System.out.println(cs.getString(1));while(rs.next()){System.out.println("============"+rs.getString(1)+rs.getString(2));}rs.close();cs.close();con.close();}
就是把sql语句换成存储过程的名字
创建存储过程:Create Proc ShowPages
@PageSize int=10 ,--每页显示的记录数
@PageCurrent int=1 ,--当前要显示的页号
@FdName varchar(100)='' ,--主键名或者标识列名
@SelectStr varchar(2000)='', --select子句,不包含select关键字,如:*或者Id,UserId,UserName等。
@FromStr varchar(1000)='', --from子句,不包含from关键子,如:myTable或者myTable,yourTable
@WhereStr varchar(2000)='', --Where子句,不包含where关键字,如空的,或者 id>2 等
@OrderByStr varchar(1000)='',--order by 子句,不包含order by 子句 ,如id desc,UserId asc 等
@CountRows int output, --返回记录总数
@CountPage int output --返回总页数
as
--------定义局部变量---------
declare @Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号
declare @OrderBySqls varchar(1000) --order by 子句
declare @WhereSqls varchar(2000) --where 子句
declare @Sqls nvarchar(4000) --最终组合成的Sqls语句
declare @TmpStr varchar(2000) --临时
----------------------------
if @OrderByStr <> ''
set @OrderBySqls = ' order by '+@OrderByStr
else
set @OrderBySqls = ''
--------
if @WhereStr <> ''
set @WhereSqls = ' where ('+@WhereStr+')'
else
set @WhereSqls = ''
--------
set @TmpStr = @WhereSqls
--如果显示第一页,可以直接用top来完成
if @PageCurrent<=1
begin
select @Id1=cast(@PageSize as varchar(20))
exec('select top '+@Id1+' '+@SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls)
goto LabelRes
end
---------------------------
select @Id1=cast(@PageSize as varchar(20))
,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20))
----------
if @WhereSqls <> ''
set @WhereSqls = @WhereSqls + ' and (' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+'))'
else
set @WhereSqls = ' where ' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+')'
----------
set @Sqls = 'select top '+@Id1+ ' '+ @SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls
exec (@Sqls)
-----------
LabelRes:
-----返回总记录数
set @Sqls = 'select @a=count(1) from '+@FromStr+@TmpStr
exec sp_executesql @sqls,N'@a int output',@CountRows output
-----返回总页数
if @CountRows <= @PageSize
set @CountPage = 1
else
begin
set @CountPage = @CountRows/@PageSize
if (@CountRows%@PageSize) > 0
set @CountPage = @CountPage + 1
end
return
GO
在ASP里调用:
page = trim(Request.QueryString("topage"))
if len(page) = 0 then page = 1
sqlfields=" ID,SortID,SortName,Title,Hits,UpdateTime,Passed "
table="newsList"
if SortID<>"" and isnumeric(SortID) and SortID >0 then
where1=stitle1&" and (SortID in(select SortID from NewsSort where ParentID="&sortid&") or SortID="&SortID&") "
else
where1=stitle1
end if
'Response.Write(where1)
set cmd = Server.CreateObject("ADODB.Command")
With cmd
.ActiveConnection = conn 'You can also just specify a connection string here
.CommandText = "ShowPages"
'.CommandType = adCmdStoredProc 'Requires the adovbs.inc file or typelib meta tag
'Add Input Parameters
.Parameters.Append .CreateParameter("@PageSize", 3, 1, , MaxPerpage)
.Parameters.Append .CreateParameter("@PageCurrent", 3, 1, , page)
.Parameters.Append .CreateParameter("@FdName", 200, 1, 100, "ID")
.Parameters.Append .CreateParameter("@SelectStr", 200, 1, 2000, sqlfields)
.Parameters.Append .CreateParameter("@FromStr", 200, 1, 1000, table)
.Parameters.Append .CreateParameter("@WhereStr", 200, 1, 2000, where1)
.Parameters.Append .CreateParameter("@OrderByStr", 200, 1, 1000, " UpdateTime desc")
'Add Output Parameters
.Parameters.Append .CreateParameter("@CountRows", 3, 2, , 1)
.Parameters.Append .CreateParameter("@CountPage", 3, 2, , 1)
'.Execute
End With
set NewsRs=cmd.execute()
for j=1 to MaxPerpage
if NewsRs.EOF then exit for
......'此处与普通相同,故略去。
NewsRs.MoveNext
Next
NewsRs.close '一定要关闭才能获取下面的返回值
CountRows1=cmd("@CountRows")
CountPage1=cmd("@CountPage")
prePage=abs(1-page)
if prePage<1 then prepage=1
nextPage=1+page
if nextPage >CountPage1 then nextPage=CountPage1
Call ShowPageCC(FileUrlName,CountRows1,MaxPerpage,true,true,"条新闻")
分页显示:
Sub ShowPageCC(FileUrlName,TotalNumber,MaxPerpage,ShowTotal,ShowAllPages,strUnit)
dim n, i,strTemp,strUrl
if totalnumber mod maxperpage=0 then
n= totalnumber maxperpage
else
n= totalnumber maxperpage+1
end if
strTemp= "<table align='center'><form name='ShowPages' method='Post' action='" & FileUrlName & "'><tr><td>"
if ShowTotal=true then
strTemp=strTemp & "共 <b>" & totalnumber & "</b> " & strUnit & " "
end if
strUrl=JoinChar(FileUrlName)
if page<2 then
strTemp=strTemp & "首页 上页 "
else
strTemp=strTemp & "<a href='" & strUrl & "topage=1'>首页</a> "
strTemp=strTemp & "<a href='" & strUrl & "topage=" & prePage & "'>上页</a> "
end if
if n-page<1 then
strTemp=strTemp & "下页 尾页"
else
strTemp=strTemp & "<a href='" & strUrl & "topage=" & nextPage & "'>下页</a> "
strTemp=strTemp & "<a href='" & strUrl & "topage=" & n & "'>尾页</a>"
end if
strTemp=strTemp & " 页次:<strong><font color=red>" & page & "</font>/" & n & "</strong>页 "
strTemp=strTemp & " <b>" & maxperpage & "</b>" & strUnit & "/页"
if ShowAllPages=true then
strTemp=strTemp & " 转到:<select name='topage' size='1' onchange='javascript:location=this.options[this.selectedIndex].value;'>"
for i = 1 to n
strTemp=strTemp & "<option value='" & strUrl & "topage=" & i & "'"
if cstr(page)=cstr(i) then strTemp=strTemp & " selected"
strTemp=strTemp & ">第" & i & "页</option>"
next
strTemp=strTemp & "</select>"
end if
strTemp=strTemp & "</td></tr></form></table>"
if n<>1 and TotalNumber<>"" then
Response.Write strTemp
End if
End Sub
SQL Server,取存储过程返回值。
如果返回标量值的话,例如文章的个数,可以使用储存过程的输出(OUTPUT)参数。在定义存储过过程时为参数指定OUTPUT关键字。C#调用存储过程时指定参数SqlParameter对象的Direction属性为Output。如果是返回多个结果集的话,可以直接在存储过程中使用多个select查询就行。在C#代码中使用SqlDataReader对象的NextResult...
在SQL中存储过程的一般语法是什么?
{@参数数据类型} [=默认值] [output],...]as SQL_statements 2、 创建不带参数存储过程 --创建存储过程 if (exists (select * from sys.objects where name = 'proc_get_student'))drop proc proc_get_student go create proc proc_get_student as select * from student;--调用、执行存储...
怎样SQL存储过程中执行动态SQL语句
stmt参数是输入的动态批处理,它可以引入输入参数或输出参数,和存储过程的主体语句一样,只不过它是动态的,而存储过程是静态的,不过你也可以在存储过程中使用sp_executesql;params参数与定义输入\/输出参数的存储过程头类似,实际上和存储过程头的语法完全一样;<params assignment> 与调用存储过程的EXEC...
系统存储过程[sp_refreshview]的内容怎么查看
执行 sp_helptext sp_refreshview 结果为:create procedure sys.sp_refreshview viewname nvarchar(776)as declare @ret int exec @ret = sys.sp_refreshsqlmodule_internal @viewname, N'OBJECT', 1 -- viewonly return @ret
如何在不提升用户权限的情况下,使普通用户执行sp_OACreate存储过程
USE tempdb;GO-- 2.b 测试存储过程WITH EXECUTE AS N'dbo' -- 指定存储过程的执行时的上下文ASDECLARE @object int;DECLARE @hr int;DECLARE @src varchar(255), @desc varchar(255);EXEC @hr = sp_OACreate 'ADODB.RecordSet', @object OUT;IF @hr < 0GOTO lb_Err;EXEC @hr = sp_...
请问带有前缀名为sp的存储过程属于?
sp_开头的为SQL Server自带的系统存储过程。通过这些存储过程我们可以对数据库系统进行简单的管理。比如说:sp_help可以查看某个表的信息 sp_helptext可以查看存储过程的脚本
汇编语言中SP寄存器是什么
1、汇编语言中SP是堆栈寄存器。堆栈是一段按照后进先出原则组织起来的连续存储区域。用于程序保存或恢复数据,或用于子程序调用及中断响应时保护与恢复现场。SP是堆栈指针寄存器,存放着当前堆栈栈顶地址;2、一般情况下,对SP有影响的指令,对SP的操作都是隐式,即SP并不出现在指令操作数当中。要注意进...
asp.net 调用存储过程
下面就来个例子,建立一新的角色,要求角色的名字不能重复,以下是一存储过程。CREATE PROCEDURE sp_AccountRole_Create@CategoryID int,@RoleName nvarchar(10),@Description nvarchar(50),@RoleID int outputAS DECLARE @Count int -- 查找是否有相同名称的记录 SELECT @Count = Count(RoleID) FROM ...
sql 存储过程怎样保存
方法和详细的操作步骤如下:1、第一步,创建一个存储过程,该代码如图所示,见下图,转到下面的步骤。2、第二步,执行完上面的操作之后,执行以下几行代码,并查看执行是否成功,现在,数据库中存在一个存储过程“sp_JY”,见下图,转到下面的步骤。3、第三步,执行完上面的操作之后,该数组只有三行...
php调用mysql存储过程(急,在线等)
关键就是两点 1)define('CLIENT_MULTI_RESULTS', 131072);2)$link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());下面就可以正常使用了,以下是例子程序。<?php define('CLIENT_MULTI_RESULTS', 131072);link = ...
仇由废丽珠: 一个比较通用的分页存储过程 CREATE procedure Page_Pagination --分页存储过程 @sqlstr nvarchar(4000), --查询字符串 @currentpage int, --第N页 @pagesize int --每页行数 as set nocount on declare @P1 int, --P1是游标的id @rowcount int...
从化市18446691400: 求一ASP 的SQL 储存过程分页代码(存储代码跟调用代码) - ?
仇由废丽珠: 这是我常用的一个分页代码 建立一个page.asp页面,内容如下: dim pageno '记录第几页 '函数名cut1,参数rs类型为Recordset '该函数主要将接收一个pageno,并将这个值赋给rs的AbsolutePage '最终达到指定当前页是第几页 function cut1(rs) ...
从化市18446691400: 请问在asp.net中除了能用gridview控件分页外还能怎样实现分页.最好有具体的例子哦,谢谢 - ?
仇由废丽珠: 一.可以使用数据源分页,自己实现分页:存储过程返回相对应的数据条数,前台页面放上几个label控件(上一页,下一页,等),每次翻页重新获取指定的数据集,重行DataBind()一下就行了.二.可以使用前台数据分页机制.三.使用.NET的PagedDataSource实现后台分页.我就晓得这3种方式,具体直接google一下吧
从化市18446691400: 如何用asp的数据集实现分页效果啊??
仇由废丽珠: ASP项目中的公共翻页模块 <% '+++++++++++++++++++++++++++++++++++++ '◆模块名称: 公共翻页模块 '◆文 件 名: TurnPage.asp '◆传入参数: Rs_tmp (记录集), PageSize (每页显示的记录条数) '◆输 出: 记录集翻页显示功能 ...
从化市18446691400: asp.net怎么实现分页啊 求代码指导!!!! - ?
仇由废丽珠: 那得看需求了分页有好多中的 有用存储过程来分页的 也可以直接用.net代码来实现 int CurrentPage = ToPage; int PageSize = 5; int PageCount; string sqlStr = "select count(*) from wmv "; int RecordCount = db.GetRecordCount(sqlStr); BindGrid...
从化市18446691400: 怎样实现sql数据库中表的分页功能,用存储过程.asp.net 谢谢回答!?
仇由废丽珠: create proc ProcPageing @pageindex int, @pagesize int as begin select top @pagesize * from TableName where ID not in(select (@pageindex-1)*@pagesize ID from TableName order by ID desc) oder by desc end go --最简单的分页存错过程 不带条件、表的 ID号连续(这里可以使用 rows_number() over(ID order by desc) as TID) 这样 不管数据库ID是不是连续的ID 这个TID就会是连续的.
从化市18446691400: Asp.Net中DataList怎么实现分页? - ?
仇由废丽珠: { .绑定语句 this.AspNetPager1.CustomInfoHTML = string.Format("当前第{0不是很清楚你问的 是要绑定数据?那用PagedDataSource 呀..
从化市18446691400: asp.net几十万条以上的数据查询!如何高效率分页和查询显示! - ?
仇由废丽珠: 1.使用存储过程分页.2.常用列,建立非聚集索引.ps:检查一下存储过程的效率.
从化市18446691400: ASP调用SQL SERVER数据表,怎么实现分页?
仇由废丽珠: asp万用分页类 Set rs=Server.Createobject("ADODB.RECORDSET") rs.Open sql, conn, 1, 1 if not rs.eof then pages = 30 '定义每页显示的记录数 rs.pageSize = pages '定义每页显示的记录数 allPages = rs.pageCount'计算一共能分多少页 ...
从化市18446691400: asp.net中sql分页的存储过程?
仇由废丽珠: 1、没具体测试,但是算法应该可以,就是两次top反转 2、设置存储过程参数的时候,加上output,执行完了,自然就有值了 如: cmd.Parameters["@count"].DbType = DbType.Int32; cmd.Parameters["@count"].Direction = ParameterDirection.Output; cmd.ExecuteScalar(); int cnt = (int)cmd.Parameters["@count"].Value;