public void bangding()
{
string sql = "select * from room where id=5 order by update desc/*没加条件前程序可以执行,加上后则报错*/";
//以下是参数,有两个是靠AspNetPager1传给par的
//真正的参数只有sql,也正是用户所用到的查询字符串
SqlParameter[] par = new SqlParameter[3];
par[0] = new SqlParameter("@sql", SqlDbType.VarChar);
par[0].Value=sql;
par[1] = new SqlParameter("@indexpage", SqlDbType.Int);
par[1].Value = this.AspNetPager1.CurrentPageIndex;
par[2] = new SqlParameter("@pagesize", SqlDbType.Int);
par[2].Value = this.AspNetPager1.PageSize;
DataSet Ds = SqlHelper.ExecuteDataset(SqlHelper.CONNECTION_STRING, CommandType.StoredProcedure, "Pr_jxytest3",par);
//绑定的地方Tables[2]是记录集
//Tables[1]是记录信息
this.GridView1.DataSource = Ds.Tables[2];
this.GridView1.DataBind();
//下面这一句是为分页控件付总的记录条数
this.AspNetPager1.RecordCount =Convert.ToInt32(Ds.Tables[1].Rows[0][1]);
} 上面的分页程序在没加上条件的情况下可以用,但如果加上条件后则执行错误.
存贮过程:
Create procedure jxytext_pagination
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as TotalPages,@rowcount as TotalRows,@currentpage as CurPage
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off
GO
create procedure Pr_jxytest3
(
@sql varchar(1000) ,
@indexpage int,
@pagesize int
)
AS
begin
exec jxytext_pagination @sql,@indexpage,@pagesize
end
GO
解决方案 »
- 表单内容无法清除~
- 200分求助 存储过程问题?XML问题?实在不解
- GridView批量保存,打印问题
- 在asp.net页面后台程序中使用Socket的问题
- C#怎么执行无参数存储过程,请给出代码
- 请教大家,我想在局域网上有一个企业使用的SQL SERVER,Internet上有一个SQL SERVER,我如使二个SQL SERVER数据同步呢?
- 编译器错误信息: CS1002: 应输入 要怎么解决
- 一个关于ASP。NET 和ACCESS 插入记录的问题分不够在加
- 链接列接收到的datagrid的数据行号始终是“{0}”,百思不得其解。
- 新手求推荐一本asp.net入门的书籍
- asp.net 动态页页转为静态页面
- 百分悬赏数据并发,大数量频繁数据操作优化
Create Procedure [dbo].[FramWorkPage]
@TableName varchar(50), --表名
@Fields varchar(5000) = '*', --字段名(全部字段为*)
@OrderField varchar(5000), --排序字段(必须!支持多字段)
@sqlWhere varchar(5000) = Null,--条件语句(不用加where)
@pageSize int, --每页多少条记录
@pageIndex int = 1 , --指定当前为第几页
@TotalPage int output, --返回条数
@OrderType bit -- 设置排序类型,1 升序 0 值则降序
as
begin
declare @strOrder varchar(400) -- 排序类型
Begin Tran --开始事务
Declare @sql nvarchar(4000);
Declare @totalRecord int;
--计算总记录数
if (@SqlWhere ='''' or @SqlWhere='' or @sqlWhere is NULL)
set @sql = 'select @totalRecord = count(*) from ' + @TableName
else
set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere
EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数
--计算总页数
select @TotalPage=@totalRecord --CEILING((@totalRecord+0.0)/@PageSize) if @OrderType = 0
begin
set @strOrder = ' order by [' + @OrderField +'] desc'
--如果@OrderType是0,就执行降序,这句很重要!
end
else
begin
set @strOrder = ' order by [' + @OrderField +'] asc'
end
if (@SqlWhere ='''' or @SqlWhere='' or @sqlWhere is NULL)
set @sql = 'Select * FROM (select ROW_NUMBER() Over( '+@strOrder+' ) as rowId,' + @Fields + ' from ' + @TableName
else
set @sql = 'Select * FROM (select ROW_NUMBER() Over( '+@strOrder+' ) as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere
--处理页数超出范围情况
if @PageIndex<=0
Set @pageIndex = 1
if @pageIndex>@TotalPage
Set @pageIndex = @TotalPage --处理开始点和结束点
Declare @StartRecord int
Declare @EndRecord int
set @StartRecord = (@pageIndex-1)*@PageSize + 1
set @EndRecord = @StartRecord + @pageSize - 1 if @OrderType = 0
begin
set @strOrder = ' order by rowid asc'
--如果@OrderType是0,就执行降序,这句很重要!
end
else
begin
set @strOrder = ' order by rowid desc'
end
--继续合成sql语句
set @Sql = @Sql + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord) + ' '+@strOrder
-- print @sql
Exec(@Sql)
---------------------------------------------------
If @@Error <> 0
Begin
RollBack Tran
Return -1
End
Else
Begin
Commit Tran
Return @totalRecord ---返回记录总数
End
end
没去看你的,直接给你一个得了,你那个用游标,数据量大了不知道你怎么办
那个存储过程是我找的一个例子,号称千万级的数据也很快...
地址:http://blog.csdn.net/hongsejiaozhu/archive/2008/06/16/2552604.aspx问题是在SQL语句里加上条件就会出错.
string sql = "select * from room where id=5 order by update desc/*没加条件前程序可以执行,加上后则报错*/";
在关键字 'order' 附近有语法错误。
游标未声明。
sp_cursorfetch: 所提供的游标标识符值(0)无效。
sp_cursorclose: 所提供的游标标识符值(0)无效。
游标未声明。
sp_cursorfetch: 所提供的游标标识符值(0)无效。
sp_cursorclose: 所提供的游标标识符值(0)无效。如果where后设string的条件(如:where name=joy)会报:列名 'joy' 无效。
游标未声明。
sp_cursorfetch: 所提供的游标标识符值(0)无效。
sp_cursorclose: 所提供的游标标识符值(0)无效。